按引用传递数组
如何通过引用传递一个静态分配的数组?
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'