void revalue(int r, int ar[], int n)
{
for(int i=0; i<n;i++)
{
ar[i]*=r;
}
}
所以我真的很困惑这段代码是如何工作的,以及它为什么会改变 ar[]。问题是我认为每次您将不是引用或指针的变量传递给函数时,都会制作变量的副本,然后在超出函数范围后将副本删除。然而这个函数改变了数组的值。
这怎么可能?
void revalue(int r, int ar[], int n)
{
for(int i=0; i<n;i++)
{
ar[i]*=r;
}
}
所以我真的很困惑这段代码是如何工作的,以及它为什么会改变 ar[]。问题是我认为每次您将不是引用或指针的变量传递给函数时,都会制作变量的副本,然后在超出函数范围后将副本删除。然而这个函数改变了数组的值。
这怎么可能?
真的很简单:当您在 C 或 C++ 中对参数使用数组表示法时,编译器会默默地调整它以实际传递指针。
IOW,你的功能真的是:
void revalue(int r, int *ar, int n)
...从那里开始,大部分内容都很清楚。
int ar[]
我想,在这种情况下,混淆是等同于写作的int* ar
:在 C++ 中,您不能按值传递内置数组。但是,它们很容易衰减为指针,上面是另一种表示法。请注意,您可以使用int ar[10]
orint ar[20]
并且它也将是相同的。
默认情况下,在 c++ 中,数组通过引用传递,被调整为指向数组第一个元素的指针。