This ...
int * puzzle[5][5]
... объявляет puzzle
как массив из 5 массивов из 5 указателей на int
каждый.В разговорной речи мы чаще называем такую вещь массивом 5 x 5, но главное, что вы должны оценить, это то, что базовый тип скалярного элемента является типом указателя.Это не соответствует скалярному типу элемента (int
) параметра функции foo
, и в любом случае вряд ли это то, что вы хотите.(Обратите внимание, что в вашем коде пропущена необходимая точка с запятой после объявления этого члена.)
Вероятно, вместо этого элемент структуры должен быть объявлен как ...
int puzzle[5][5];
... т.е.2D массив int
.C не имеет назначения целого массива, поэтому в этом случае вам нужен другой способ скопировать параметр функции в новую структуру.Вы можете написать набор вложенных циклов, но проще использовать memcpy()
:
memcpy(&puz->puzzle, grid, sizeof(puz->puzzle));
В том маловероятном случае, когда ваша структура будет содержать указатель на массив, тогдаВы можете объявить его как
int (*puzzle)[5];
или
int (*puzzle)[5][5];
или даже
int *puzzle;
Какой из выбранных вами параметров повлияет на способ назначения участника икак вы получаете доступ к элементам массива int
.Поскольку я не думаю, что это то, что вам нужно, я оставляю детали в качестве упражнения.