2013-02-22 7 views
0

В настоящее время я работаю над заданием для школы, и в настоящее время я застрял. То, чего я пытаюсь достичь, на мой взгляд, довольно простое. Я определил структуру. В этой структуре я сделал матрицу. Следующее, что я хочу сделать, это добавить информацию в эту матрицу, используя только указатель на эту структуру.Изменение содержания матрицы в структуре в C

Так вот моя структура:

typedef struct maze{ 
    char mazeMatrix[6][10]; 
}; 

и мой указатель на эту структуру:

typedef struct maze* mazePointer; 

Я тогда инициализировать это в другой функции. Я искал требуемый синтаксис на многих сайтах, но я не могу найти требуемый синтаксис. Как я могу изменить содержимое матрицы, поэтому, например, я хочу изменить первую запись (первая строка, первая колонка) mazeMatrix[0][0] с «H». Каким будет синтаксис для достижения этого?

Я также предоставляю указатель на функцию, которая должна обновить структуру.

+2

Вы действительно должны показать контекст того, что вы пробовали, и ошибки, сообщаемые компилятором. Это, как вы думаете, очень просто (по крайней мере, как только вы это сделали несколько раз). Но ваши предупреждения компилятора помогут ... или, если код скомпилирован, может быть, проблема в том, что вы передавали структуру по значению, а не по ссылке, поэтому функция изменяла копию лабиринта, а не самого лабиринта. Мы не можем сказать, потому что вы не показали нам SSCCE ([Short, Self-Contained, Correct Example] (http://sscce.org/)). –

ответ

1

Дано:

mazePointer mp = ...; 

mp->mazeMatrix[0][0] = 'H'; 

Лично я предпочел бы не скрывать указатели в ЬурейеЕ, так что я хотел бы использовать:

typedef struct Maze { char mazeMatrix[6][10]; } Maze; 

Maze *mp = ...; 
mp->mazeMatrix[0][0] = 'H'; 

Конец линии является то же самое. Обратите внимание, что ваш typedef struct maze { ...}; не определяет имя для типа; ключевое слово typedef является излишним и должно быть удалено (и хорошие компиляторы будут предупреждать вас об этом). Я бы, вероятно, также просто использовал слово matrix, а не mazeMatrix; это структура лабиринта, матрица внутри которой является матрицей лабиринта, без необходимости в префиксе.


Вызов контекст:

Maze m; 

maze_modifier(&m); 

Вызывается контекст:

void maze_modifier(Maze *mp) 
{ 
    mp->mazeMatrix[0][0] = 'H'; 
    ... 
} 

Мой следующий вопрос, то печать эту матрицу из указателя. Я использую:

printf("%c", mazePointer->matrix[counter][counterA]); 

Счетчики всего 2 переменные из 2 вложенных для петель. Какие-либо предложения?

Это должно сработать. Так должно быть:

void maze_printer(Maze *mp) 
{ 
    for (int i = 0; i < 6; i++) 
    { 
     for (int j = 0; j < 10; j++) 
      putchar(mp->mazeMatrix[i][j]); 
     putchar('\n'); 
    } 
} 
Смежные вопросы