通过引用传递静态分配的数组是如何工作的?
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
(&myArray)[100]
有什么意义吗?或者它只是一种通过引用传递数组的语法?我不明白这里后面跟着大括号的单独括号。谢谢。
发布于 2011-04-20 08:07:55
这是一种数组引用的语法--您需要使用(&array)
向编译器说明您需要的是对数组的引用,而不是引用int & array[100];
的(无效)数组。
编辑:一些说明。
void foo(int * x);
void foo(int x[100]);
void foo(int x[]);
这三种是声明相同函数的不同方式。它们都被视为接受int *
参数,您可以将任意大小的数组传递给它们。
void foo(int (&x)[100]);
这只接受100个整数的数组。您可以在x
上安全地使用sizeof
void foo(int & x[100]); // error
这被解析为“引用数组”--这是不合法的。
发布于 2011-04-20 08:08:42
这只是必需的语法:
void Func(int (&myArray)[100])
^引用传递100 int
数组,参数名为myArray
;
void Func(int* myArray)
^传递数组。数组衰减为指针。因此,您将丢失大小信息。
void Func(int (*myFunc)(double))
^传递函数指针。该函数返回一个int
并接受一个double
。参数名称为myFunc
。
发布于 2011-04-20 09:06:58
它是一种语法。在函数参数中,必须使用包含&myArray
的int (&myArray)[100]
括号。如果不使用它们,您将传递一个array of references
,这是因为subscript operator []
比& operator
具有更高的优先级。
例如,int &myArray[100] // array of references
因此,通过使用type construction ()
,您告诉编译器您希望引用一个由100个整数组成的数组。
例如int (&myArray)[100] // reference of an array of 100 ints
https://stackoverflow.com/questions/5724171
复制相似问题