我知道这很简单,但我似乎无法做到这一点。
我的功能是这样的:
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;
}
我提到了this有用的资源,但我仍然收到错误"warning: passing argument 1 of GefMain from incompatible pointer type."
我做错了什么?
编辑:
代码在两个文件中,由编译器链接在一起。我没有使用gcc。上面的代码正是我所拥有的,除了函数在main中被声明为“extern int”。谢谢大家的时间。
答案 0 :(得分:2)
代码很好。在一个文件中,这对我来说很好用gcc。
int g(int arr[][5])
{
return 1;
}
int main()
{
int array[1800][5];
g(array);
return 0;
}
我的猜测是你#include
错误的文件 - 也许是GefMain
声明不同的文件。或者您可能只是没有保存声明为GefMain
的文件,因此它仍然具有int [][3]
的参数,这会导致警告。
我建议您发布整个代码以重现问题(当然,在删除所有不需要的东西后重现它)。但是,在这一点上,你可能会自己解决它。
答案 1 :(得分:1)
即使使用-std=c99 -pedantic
选项,它也能正确编译。无论如何它看起来都是正确的...它真的是你想要我们检查的代码吗?编译器你正在使用......?
答案 2 :(得分:0)
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;
}
你得到一个警告,因为任何维度的数组在作为争论传递时成为指针,上面给编译器一个它应该期望的线索。