通过引用传递数组

Passing an array by reference

本文关键字:数组 引用      更新时间:2023-10-16

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

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

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

这是数组引用的语法-您需要使用(&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

被解析为"引用数组"——这是不合法的。

只是需要的语法:

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

^通过引用参数名为myArray的100个int数组;

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个整数数组的引用。

E。g 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
}

数组默认由指针传递。为了更好地理解,您可以尝试在函数调用中修改数组。