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

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

这怎么可能?

4

3 回答 3

3

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

IOW,你的功能真的是:

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

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

于 2012-12-07T23:58:49.820 回答
3

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

于 2012-12-07T23:59:21.703 回答
0

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

于 2012-12-07T23:58:35.273 回答