如何通过引用传递静态分配的数组?
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
Run Code Online (Sandbox Code Playgroud)
是否(&myArray)[100]有任何意义或只是通过引用传递任何数组的语法?我不明白单独的括号后跟大括号.谢谢.
Eri*_*rik 211
它是数组引用的语法 - 您需要使用它(&array)来向编译器说明您希望引用数组,而不是(无效)引用数组int & array[100];.
编辑:一些澄清.
void foo(int * x);
void foo(int x[100]);
void foo(int x[]);
Run Code Online (Sandbox Code Playgroud)
这三种是声明相同功能的不同方式.它们都被视为接受int *参数,您可以将任何大小的数组传递给它们.
void foo(int (&x)[100]);
Run Code Online (Sandbox Code Playgroud)
这只接受100个整数的数组.您可以放心地使用sizeof上x
void foo(int & x[100]); // error
Run Code Online (Sandbox Code Playgroud)
这被解析为"引用数组" - 这是不合法的.
Mar*_*ork 45
这只是必需的语法:
void Func(int (&myArray)[100])
Run Code Online (Sandbox Code Playgroud)
^ int通过引用参数名称传递100 的数组myArray;
void Func(int* myArray)
Run Code Online (Sandbox Code Playgroud)
^传递一个数组.数组衰减为指针.因此,您丢失了大小信息.
void Func(int (*myFunc)(double))
Run Code Online (Sandbox Code Playgroud)
^传递函数指针.该函数返回一个int并取一个double.参数名称是myFunc.
cpx*_*cpx 21
这是一种语法.在函数参数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
下面创建一个泛型函数,通过引用获取任何大小和任何类型的数组:
template<typename T, std::size_t S>
void my_func(T (&arr)[S]) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
数组默认通过指针传递。您可以尝试修改函数调用内的数组以更好地理解。