通过引用传递数组

时间:2011-04-20 00:05:40

标签: c++ arrays

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

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

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

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

5 个答案:

答案 0 :(得分:193)

这是数组引用的语法 - 您需要使用(&array)向编译器说明您希望引用数组,而不是(无效)引用数组int & array[100];

编辑:一些澄清。

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

这三种是声明相同功能的不同方式。它们都被视为采用int *参数,您可以将任何大小的数组传递给它们。

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

这只接受100个整数的数组。您可以在sizeof

上安全地使用x
void foo(int & x[100]); // error

这被解析为“引用数组” - 这是不合法的。

答案 1 :(得分:41)

这只是必需的语法:

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

^通过引用传递100 int的数组,参数名称为myArray;

void Func(int* myArray)

^传递一个数组。数组衰减为指针。因此,您将丢失尺寸信息。

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

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

答案 2 :(得分:20)

这是一种语法。在函数参数int (&myArray)[100]中,括起&myArray的括号是必需的。如果您不使用它们,则会传递array of references,这是因为subscript operator []的优先级高于& operator

E.g。 int &myArray[100] // array of references

因此,通过使用type construction (),您告诉编译器您需要引用100个整数的数组。

E.g int (&myArray)[100] // reference of an array of 100 ints

答案 3 :(得分:4)

下面的代码创建一个泛型函数,通过引用获取任意大小和任何类型的数组:

template<typename T, std::size_t S>
void my_func(T (&arr)[S]) {
   // do stuff
}

play with the code.

答案 4 :(得分:3)

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