【问题标题】:How to pass array by reference in my actual parameters如何在我的实际参数中通过引用传递数组
【发布时间】: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&lt;int&gt;&amp; 并利用向量知道其大小这一事实。
  • 因为我想知道我应该循环多少次。当我将 a[] 传递给调用函数时,a[] 衰减为指向第一个元素的指针。从这个意义上说,我会丢失有关此数组大小的信息,这意味着我应该将数组的长度加在一起.
  • @user3570984:使用此签名,a 不会衰减为指针,因此您知道大小(并且可以删除 int len)。
  • 但是大小就在那里,在函数签名中!

标签: c++ arrays pass-by-reference


【解决方案1】:
int& refer=*a;

这不是对数组的引用,而是对其第一个元素的引用。试试:

int (&refer)[5] = a;
add(refer,len);

【讨论】:

  • 至于 int (&refer)[5] = a;我不太明白为什么您可以将指针(如 a)分配给引用。
  • @user3570984:因为a 不是指针。这是一个数组。表达式a 在某些上下文中衰减为指针,主要是在预期指针的地方。另请注意,这不是分配。这是初始化,虽然用= 符号表示。
  • @user3570984 您可以像引用整数一样引用数组(或指针)。 int (&amp;refer)[5] = a; 表示 "refer 是对 a" 的引用。
猜你喜欢
  • 2011-12-15
  • 2015-07-06
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2010-10-07
  • 2019-02-12
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多