void revalue(int r, int ar[], int n)
{
for(int i=0; i<n;i++)
{
ar[i]*=r;
}
}
所以我很困惑這個代碼如何工作,爲什麼它會改變ar []。事情是,我認爲每次將不參考指針或指針的變量傳遞給函數時,都會創建該變量的副本,然後該副本在超出函數範圍後被刪除。然而這個函數改變了數組值。這個數組操作在C++中如何工作?
這怎麼可能?
void revalue(int r, int ar[], int n)
{
for(int i=0; i<n;i++)
{
ar[i]*=r;
}
}
所以我很困惑這個代碼如何工作,爲什麼它會改變ar []。事情是,我認爲每次將不參考指針或指針的變量傳遞給函數時,都會創建該變量的副本,然後該副本在超出函數範圍後被刪除。然而這個函數改變了數組值。這個數組操作在C++中如何工作?
這怎麼可能?
數組默認情況下通過引用傳遞給數組,該數組被調整爲指向數組的第一個元素的指針。
「通過引用」應該小心使用:數組可以很容易地通過引用以C++的方式傳遞給一個接受對數組的引用的函數(OP函數沒有) – Cubbi
真的很簡單:當您在C或C++中使用數組符號表示參數時,它將被編譯器無聲地調整以實際傳遞一個指針。
督察,你的函數是真的:
void revalue(int r, int *ar, int n)
...並從那裏,其中大部分是相當清楚的。
我想,這個混淆與int ar[]
,在這種情況下,相當於寫作int* ar
:在C++中,您不能通過值傳遞內置數組。但是,它們很容易衰變成指針,上面是另一種表示法。請注意,您可以使用int ar[10]
或int ar[20]
,它也會一樣。
一個數組基本上變成了一個指針。 – BoBTFish