Хотя массивы и указатели несколько взаимозаменяемы в C, они не совсем одинаковы.В частности, массив массивов и массив указателей по-разному размещаются в памяти.
Вот способ создать массив указателей, который ссылается на те же данные, что и существующий массив массивов:
field* field_rows[xsize];
for (unsigned int i=0; i<xsize; i++) {
field_rows[i] = fields[i];
}
Затем указатель на этот массив field_rows
может быть передан в MoveLeft
:
MoveLeft(&Pacman,field_rows,play);
Другое решение может состоять в том, чтобы вместо этого изменить объявление MoveLeft
, чтобы взять указательв массив массивов:
void MoveLeft(pacman *Pacman, field fields[xsize][ysize], int **play);
MoveLeft(&Pacman,fields,play);