【发布时间】:2014-10-02 01:47:36
【问题描述】:
当我尝试使用 int(& a)[5] 通过引用传递数组时遇到错误。 但是当我想实现它时,我们应该传递一个我初始化为的引用 int & 参考=*a; 以下是我的代码,以及将引用和指针传递给调用函数的两种方法。如何解释我不能简单地将引用传递给它?
#include <iostream>
using namespace std;
void add(int (&)[5],int );
int main()
{
int a[5]={5,4,3,2,1};
int len=sizeof(a)/sizeof(a[0]);
cout<<"len="<<len<<endl;
cout<<"a="<<a<<endl;// the name of array is actually the pointer
int& refer=*a;
add(a,len); //which is correct,we pass a pointer to the calling function;
add(refer,len); //which is wrong,we pass a reference to the calling function;
for(int i=0;i<len;i++){
cout<<a[i]<<" ";
}
return 0;
}
void add(int (&a)[5],int len){
for(int i=0;i<len;i++){
a[i]=a[i]+10;
}
}
【问题讨论】:
-
如果 add 只需要一个大小为 5 的数组,为什么要传递长度?您只需要
int a[]传递一个数组以在函数中进行修改。在 C++ 中,您可以使用std::vector<int>&并利用向量知道其大小这一事实。 -
因为我想知道我应该循环多少次。当我将 a[] 传递给调用函数时,a[] 衰减为指向第一个元素的指针。从这个意义上说,我会丢失有关此数组大小的信息,这意味着我应该将数组的长度加在一起.
-
@user3570984:使用此签名,
a不会衰减为指针,因此您知道大小(并且可以删除int len)。 -
但是大小就在那里,在函数签名中!
标签: c++ arrays pass-by-reference