数组作为函数的参数
有一系列结构。
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);