通过引用传递int / char数组的错误/警告

时间:2010-04-11 21:11:42

标签: c arrays pass-by-reference

我正在开发一个程序,我尝试通过引用传递参数。我试图通过引用传递2D int数组和1D char数组。

功能原型:

void foo (int* (&a)[2][2], char* (&b)[4])

函数调用:

foo (a, b);

但是,当我在gcc上使用-ansi-Wall标志编译代码时,出现以下错误:

foo.c: At top level:
error: expected ‘)’ before ‘&’ token
error: expected ‘;’, ‘,’ or ‘)’ before ‘char’
foo.c: In function ‘main’:
error: too many arguments to function ‘foo’

我已经删除了我的程序的其余代码,并集中在那些引发错误的位上。我在StackOverflow上搜索并尝试了不同的方法来传递参数,但它们似乎都没有工作。 (I took this way of passing parameters from the discussion on StackOverflow here。)

你可以告诉我我哪里出错吗?

2 个答案:

答案 0 :(得分:4)

引用不是C语言的一部分,您尝试使用的语法仅适用于C ++。

顺便提一下,char* (&b)[4]是对四个char*数组的引用,char*char的1d数组,而不是int的1d数组。

通常,采用char s的2d数组和void foo(int a[][2], char b[]); 的1d数组的函数将被声明为

void foo(int (*a)[2], char *b);

与:

相同
{{1}}

答案 1 :(得分:1)

首先,正如查尔斯所说,C没有参考。但通常你可以用指针替换引用,并通过稍微不同的语法得到相同的结果。

其次,您的描述说您尝试传递2D int数组,但您的声明表明它实际上是一个int *指针数组。那么,应该是什么,一组int或一组int *

假设您需要一个int数组(以及一个char数组),带有指针到数组而不是引用数组的变体可能如下所示

void foo(int (*a)[2][2], char (*b)[4]);

基本上与您使用的语法相同,但*代替&。在函数内部,数组元素将被访问为(*a)[i][j](*b)[k]

将调用此函数,如下所示

int a[2][2];
char b[4];
...
foo(&a, &b);