2010-06-02 95 views
2

我知道这很简单,但我似乎无法完成这项工作。传递2d数组在C中运行?

我的功能,像这样:

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

适用于使用gcc的我。您确定数组声明和GefMain参数的列数是5吗? – user85509 2010-06-02 16:25:49

+1

您发布的代码将编译时没有任何错误或警告。您必须张贴虚假代码。请发布真实的。 – AnT 2010-06-02 16:34:45

+0

ahh ok你没有使用gcc ...即使使用'-std = c99 -pedantic'选项,gcc也不会发出警告(没有-std = c99抱怨//风格评论)...知道编译器可以帮助谁拥有你的编译器来帮助你! – ShinTakezou 2010-06-02 17:13:49

回答

2

代码很好。在一个单独的文件中,这个编译适合我使用gcc。

int g(int arr[][5]) 
{ 
    return 1; 
} 

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

我的猜测是,你#include荷兰国际集团的错误的文件 - 或许是一个有不同的声明GefMain。或者你也许还没有保存声明GefMain的文件,所以它仍然有一个参数int [][3],例如,它会导致警告。

我建议你发布整个代码来重现问题(当然你会去掉所有不需要重现它的东西)。但是,在那个时候,你很可能会自己解决它。

+0

是的,他只是接到警告。问题是为什么? – Simon 2010-06-02 16:25:20

+0

我的代码实际上有两个文件。这会改变什么吗?代码中的唯一区别是主文件中的声明具有“extern int”而不是int。 – Evelyn 2010-06-02 16:51:56

+0

同样的事情......即使使用'-pedantic'选项和extern int也可以编译好。 – ShinTakezou 2010-06-02 17:11:35

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

你得到一个警告,因为任何尺寸的阵列成为当它作为一个arguement传递指针,上面给出了编译器的线索,它应该指望这样。

+3

它不会“更便携”。 OP的代码尽可能标准和便携。 – AnT 2010-06-02 16:35:48

+0

不幸的是,我仍然得到同样的错误。 – Evelyn 2010-06-02 17:09:22

+1

,顺便说一下,答案是不正确的,因为你的代码是从标准(和便携性)的角度来看是完美的(它不使用任何gcc分机,而且你根本没有使用gcc!)!告诉我们你正在使用的是哪个编译器(和版本)。 – ShinTakezou 2010-06-02 17:18:53

1

即使使用-std=c99 -pedantic选项,它也可以正确编译。无论如何它看起来不错......它真的是你想要检查的代码吗?你正在使用的编译器...?