通过引用传递数组
Passing an array by reference
如何通过引用传递静态分配的数组?
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
}
数组默认由指针传递。为了更好地理解,您可以尝试在函数调用中修改数组。
相关文章:
- 通过指针与数组引用扩展数组索引序列
- 将链表的内容放在数组引用中
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- C 在将数组引用分配给struct时麻烦
- Typedef数组引用
- 通过强制转换创建子数组引用
- 将数组引用 'T(&)[n]' 引用到 'std::array<T, n>' 的内容
- constexpr 数组引用参数
- 寻找有关函数定义和原型中数组引用的说明
- Initializer_list作为非模板上下文中数组引用参数的参数
- 如何使用一个动态创建的一维数组的二维数组引用仅与标准库?
- 如何返回具有大小的POD数组引用
- 在C++中返回数组引用的语法
- 是否可以声明转换函数返回数组引用而不使用typedef
- 自定义到数组引用的转换
- 类数组引用的NullReferenceException
- 数组指针与数组引用之间的差异
- 在c++中传递数组引用
- 使用特征矩阵作为特征数组引用的参数
- 如何从函数传递数组引用