Я столкнулся с ошибкой, когда пытался передать массив по ссылке, используя int(& a)[5]. Но когда я хочу это реализовать, мы должны передать ссылку, которую я инициализирую как int & refer=*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;
}
}
int a[]
передать массив для модификации в функцию. В C++ вы можете использоватьstd::vector<int>&
и воспользоваться тем фактом, что вектор знает свой размер. - person Neil Kirk   schedule 02.10.2014a
не превращается в указатель, поэтому вы знаете размер (и можете удалитьint len
). - person Jarod42   schedule 02.10.2014