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

时间:2010-06-02 16:17:14

标签: c arrays pointers multidimensional-array

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

我的功能是这样的:

 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”。谢谢大家的时间。

3 个答案:

答案 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;
}

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