这个数组操作如何在C ++中工作?

时间:2012-12-07 23:56:29

标签: c++

void revalue(int r, int ar[], int n)
{
    for(int i=0; i<n;i++)
    {
        ar[i]*=r;
    }
}

所以我真的很困惑这个代码是如何工作的以及为什么它改变了ar []。事情是我认为,每当你将不是引用的变量或指针传递给一个函数的变量副本时,就会在复制超出函数范围后删除它。然而,此函数会更改数组值。

这怎么可能?

3 个答案:

答案 0 :(得分:3)

非常简单:当你在C或C ++中为参数使用数组表示法时,编译器会默默地调整它以实际传递指针。

IOW,你的功能真的是:

void revalue(int r, int *ar, int n)

......从那里开始,大部分都很清楚。

答案 1 :(得分:3)

我想,混淆是int ar[],在这种情况下,它等同于编写int* ar:在C ++中,你无法通过值传递内置数组。但是,它们很容易衰减成指针,上面是另一种表示法。请注意,您可以使用int ar[10]int ar[20],它也可以使用相同的内容。

答案 2 :(得分:0)

默认情况下,在c ++中通过引用传递数组,调整为指向数组第一个元素的指针。