涉及一系列参考文献的技术性

时间:2013-11-27 13:48:59

标签: c++ arrays reference

我为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;
            }
        }

    }

}

2 个答案:

答案 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)对你的情况完全没问题。