按引用传递数组

如何通过引用传递一个静态分配的数组?

void foo(int (&myArray)[100]) { } int main() { int a[100]; foo(a); } 

(&myArray)[100]是否有任何意义,或者它只是一个通过引用传递数组的语法? 我不明白单独的括号后面跟着大括号。 谢谢。

这是一个数组引用的语法 – 你需要使用(&array)来向编译器说明你想要引用一个数组,而不是引用int & array[100]; )的(无效)数组int & array[100];

编辑:一些澄清。

 void foo(int * x); void foo(int x[100]); void foo(int x[]); 

这三种是声明相同function的不同方式。 他们都被视为一个int *参数,你可以传递任何大小的数组给他们。

 void foo(int (&x)[100]); 

这只接受100个整数的数组。 你可以放心地在x上使用sizeof

 void foo(int & x[100]); // error 

这被parsing为“参考数组” – 这是不合法的。

这只是所需的语法:

 void Func(int (&myArray)[100]) 

^通过引用传递100个int的数组参数name是myArray ;

 void Func(int* myArray) 

^通过一个数组。 数组衰减到一个指针。 因此你失去了大小的信息。

 void Func(int (*myFunc)(double)) 

^传递一个函数指针。 该函数返回一个int并采取一个double 。 参数名称是myFunc

这是一个语法。 在函数参数int (&myArray)[100]中,包含&myArray括号是必须的。 如果你不使用它们,你将传递一个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

数组默认通过指针传递。 您可以尝试修改函数调用中的数组,以便更好地理解。

另外,这不会为我编译。 似乎Func是一个保留的系统词,你需要命名你的function,而不是'function'