传递2d数组在C中运行?

我知道这很简单,但我似乎无法做到这一点。

我的function是这样的:

int GefMain(int array[][5]) { //do stuff return 1; } 

在我的主要:

  int GefMain(int array[][5]); int main(void) { int array[1800][5]; GefMain(array); return 0; } 

我提到了这个有用的资源,但我仍然收到错误"warning: passing argument 1 of GefMain from incompatible pointer type." 我究竟做错了什么?

编辑:

代码在两个文件中,由编译器链接在一起。 我没有使用gcc。 上面的代码正是我所拥有的,除了函数在main中声明为“extern int”。 谢谢大家的时间。

代码很好。 在一个文件中,这对我用gcc编译很好。

 int g(int arr[][5]) { return 1; } int main() { int array[1800][5]; g(array); return 0; } 

我的猜测是你在#include错误的文件 – 也许是一个对GefMain有不同声明的GefMain 。 或者你可能只是没有保存声明GefMain的文件,所以它仍然有一个int [][3]的参数,这会导致警告。

我建议您发布整个代码来重现问题(当然,在删除所有不需要的东西后重现它)。 但是,在这一点上,你可能会自己解决它。

即使使用-std=c99 -pedantic选项,它也能正确编译。 无论如何它看起来都正确……它真的是你想要我们检查的代码吗? 编译器你正在使用……?

gcc将拥有你所拥有的扩展(其他人已经成功)。 相反,尝试这个,它将更容易移植到其他c编译器:

 int g(int (* arr)[5]) { return 1; } int main() { int array[1800][5]; g(array); return 0; } 

还是更好;

 int g(int (* arr)[5], int count) { return 1; } int main() { int array[1800][5]; g(array, sizeof(array)/sizeof(* array)); return 0; } 

你得到一个警告,因为任何维度的数组在作为争论传递时成为指针,上面给编译器一个它应该期望的线索。