我正在开发一个程序,我尝试通过引用传递参数。我试图通过引用传递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。)
你可以告诉我我哪里出错吗?答案 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);