如何通过引用传递静态分配的数组?通过引用传递数组
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
是否(&myArray)[100]
有任何意义或它只是一个语法按引用传递任何阵列? 我不明白单独的括号后面跟着大括号。谢谢。
如何通过引用传递静态分配的数组?通过引用传递数组
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
void foo(int & x[100]); // error
这被解析为“中引用数组”安全使用sizeof
。
为什么我们不能有一个引用数组例如'int a,b,c; int arr [3] = {a,b,c};'? – Vorac 2016-01-07 13:10:53
啊哈,发现[为什么](http://stackoverflow.com/questions/1164266/why-arrays-of-references-are-illegal#1164306)。 – Vorac 2016-01-08 13:51:50
有人可以解释为什么'void foo(int&x [100]);'被解析为“引用数组”?是因为“从右到左”的规则?如果是的话,它似乎不符合'void foo(int(&x)[100]);'被解析为“对数组的引用”。提前致谢。 – zl9394 2017-02-11 00:52:34
这只是所需的语法:
^通行证阵列100int
通过引用
void Func(int (&myArray)[100])
的参数的名称是myArray
;
void Func(int* myArray)
^传递数组。数组衰减到一个指针。因此你失去了尺寸信息。
void Func(int (*myFunc)(double))
^传递函数指针。该函数返回一个int
并采取double
。参数名称是myFunc
。
我们如何传递一个可变大小的数组作为参考? – 2017-06-29 08:07:50
@ShivamArora您可以对函数进行模板化并将大小设置为模板参数。 – 2017-06-29 15:53:00
它是一种语法。在函数参数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
数组是违约指针传递。您可以尝试修改函数调用中的数组以便更好地理解。
数组无法按值传递。如果函数接收到一个指针,则数组会衰减到指向其第一个元素的指针。我不确定你在这里想说什么。 – 2015-07-19 08:50:24
@UlrichEckhardt我想说的是,“数组无法通过值传递”,如前所述,它们默认通过引用传递 – 2015-07-24 21:52:30
数组既没有被传递,也没有被传递。他们通过指针传递。如果数组默认情况下是通过引用传递的,那么使用sizeof就没有问题了。但事实并非如此。数组传递到函数时会衰减指针。 – user3437460 2016-05-27 16:43:36
是否有任何与函数参数的左值和右值的关系? – 2011-04-20 00:16:14
可能的重复[什么是有用的数组引用参数?](http://stackoverflow.com/questions/2188991/what-is-useful-about-a-reference-to-array-parameter) – AnT 2011-04-20 00:25:59
[有关引用数组参数的有用信息?](https://stackoverflow.com/questions/2188991/what-is-useful-about-a-reference-to-array-parameter) – anatolyg 2017-07-08 23:07:43