我为following problem编写了此代码。我的编译器给出了以下错误 - [错误]声明'a'作为引用数组。有什么问题?
void repfunc(int& a[],int size){
for(int i=size-1;i>=0;--i){
if(a[i]==0){
a[i]=1;
return;
}
for(int j=i-1;j>=0;--ji){
if(a[i]==a[j]&&a[i]!=9){
++a[i];
a[i]%=10;
return;
}
else if(a[i]==a[j]&&a[i]==9){
a[j-1]++;
a[j-1]%=10;
FOR(k, 1,size-j){
a[k]=k;
}
return;
}
}
}
}
答案 0 :(得分:6)
如错误所示,您不能拥有一系列引用。看起来你实际上是想通过引用传递一个数组。您可以(通过更改它来执行此操作)以获取指向数组开头的指针:
void repfunc(int a[], int size) // equivalent to "int * a"
由于数组可以转换为指针,如果参数是数组
,这将是正确的int a[4] = {1,2,3,4};
repfunc(a, sizeof a / sizeof a[0]);
或者,您可以接受对正确大小的数组的引用:
template <size_t size>
repfunc(int (&a)[size])
允许自动推断尺寸
int a[4] = {1,2,3,4};
repfunc(a);
但请注意,只有当a
实际上是一个数组时才会有效;不,例如指向动态分配的数组的指针。
答案 1 :(得分:1)
C ++标准8.3.2 / 4清楚地表明:
不得引用引用,没有引用数组,也没有引用指针
实际上引用必须始终引用某些东西 - 没有空引用这样的东西。这就是为什么没有引用数组的原因,因为没有办法将数组内的引用实例化为有意义的值。 -Source是Here。
并且还通过指针算术访问原点数组。因此,如果我们想要支持引用数组,我们必须支持引用指针,按照标准是不可能的。 这些是无法参考的原因。这就是你在做什么。
正如Mike Seymour所说:
void repfunc(int a[], int size)
对你的情况完全没问题。