数组作为函数的参数

有一系列结构。

static field fields[xsize][ysize]; 

我想在function上改变它

  void MoveLeft(pacman *Pacman, field **fields,int **play) 

但是,当我这样发送它

  MoveLeft(&Pacman,fields,play); 

我有一个错误。

场 – 结构

  typedef struct { blossom blossoms; wall walls; }field; 

开花和墙壁 – 另一个结构

尽管数组和指针在C中有些可互换,但它们并不完全相同。 特别是,数组数组和指针数组在内存中的布局不同。

这是一种创建指针数组的方法,它引用与现有数组数组相同的数据:

 field* field_rows[xsize]; for (unsigned int i=0; i 

然后可以将指向该field_rows数组的指针传递给MoveLeft

 MoveLeft(&Pacman,field_rows,play); 

另一种解决方案可能是更改MoveLeft的声明,以获取指向数组数组的指针:

 void MoveLeft(pacman *Pacman, field fields[xsize][ysize], int **play); MoveLeft(&Pacman,fields,play); 

我想错误如下:二维数组fields[xsize][ysize]是固定大小的数组(xsize / ysize是定义或consts),在内存中这看起来不像field** ,因为它指向指向字段的指针,而fields[xsize][ysize]内部只是一维固定大小的数组,编译器为你处理双索引。

所以你需要的只是将字段定义为field**并动态分配它。

有关更多说明,请参见图片 在此处输入图像描述

虽然我不使用Windows,但我猜你的错误与此类似:

 error: cannot convert 'field (*)[xx]' to 'field**' for argument '2' to 'void MoveLeft(pacman*, field**,int**)' 

解决这个问题的方法是简单地将fields参数强制转换为函数所需的类型:

 MoveLeft(&Pacman, (field **) fields, play);