首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过引用传递数组

通过引用传递数组
EN

Stack Overflow用户
提问于 2011-04-20 08:05:40
回答 5查看 448.9K关注 0票数 222

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

代码语言:javascript
复制
void foo(int (&myArray)[100])
{
}

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

(&myArray)[100]有什么意义吗?或者它只是一种通过引用传递数组的语法?我不明白这里后面跟着大括号的单独括号。谢谢。

EN

回答 5

Stack Overflow用户

发布于 2011-04-20 08:07:55

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

编辑:一些说明。

代码语言:javascript
复制
void foo(int * x);
void foo(int x[100]);
void foo(int x[]);

这三种是声明相同函数的不同方式。它们都被视为接受int *参数,您可以将任意大小的数组传递给它们。

代码语言:javascript
复制
void foo(int (&x)[100]);

这只接受100个整数的数组。您可以在x上安全地使用sizeof

代码语言:javascript
复制
void foo(int & x[100]); // error

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

票数 269
EN

Stack Overflow用户

发布于 2011-04-20 08:08:42

这只是必需的语法:

代码语言:javascript
复制
void Func(int (&myArray)[100])

^引用传递100 int数组,参数名为myArray

代码语言:javascript
复制
void Func(int* myArray)

^传递数组。数组衰减为指针。因此,您将丢失大小信息。

代码语言:javascript
复制
void Func(int (*myFunc)(double))

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

票数 60
EN

Stack Overflow用户

发布于 2011-04-20 09:06:58

它是一种语法。在函数参数中,必须使用包含&myArrayint (&myArray)[100]括号。如果不使用它们,您将传递一个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

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5724171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档