void revalue(int r, int ar[], int n)
{
for(int i=0; i<n;i++)
{
ar[i]*=r;
}
}
所以我真的很困惑这个代码是如何工作的以及为什么它改变了ar []。事情是我认为,每当你将不是引用的变量或指针传递给一个函数的变量副本时,就会在复制超出函数范围后删除它。然而,此函数会更改数组值。
这怎么可能?
答案 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 ++中通过引用传递数组,调整为指向数组第一个元素的指针。