2012-12-07 29 views
0
void revalue(int r, int ar[], int n) 
{ 
    for(int i=0; i<n;i++) 
    { 
     ar[i]*=r; 
    } 
} 

所以我很困惑這個代碼如何工作,爲什麼它會改變ar []。事情是,我認爲每次將不參考指針或指針的變量傳遞給函數時,都會創建該變量的副本,然後該副本在超出函數範圍後被刪除。然而這個函數改變了數組值。這個數組操作在C++中如何工作?

這怎麼可能?

+0

一個數組基本上變成了一個指針。 – BoBTFish

回答

0

數組默認情況下通過引用傳遞給數組,該數組被調整爲指向數組的第一個元素的指針。

+0

「通過引用」應該小心使用:數組可以很容易地通過引用以C++的方式傳遞給一個接受對數組的引用的函數(OP函數沒有) – Cubbi

3

真的很簡單:當您在C或C++中使用數組符號表示參數時,它將被編譯器無聲地調整以實際傳遞一個指針。

督察,你的函數是真的:

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

...並從那裏,其中大部分是相當清楚的。

3

我想,這個混淆與int ar[],在這種情況下,相當於寫作int* ar:在C++中,您不能通過值傳遞內置數組。但是,它們很容易衰變成指針,上面是另一種表示法。請注意,您可以使用int ar[10]int ar[20],它也會一樣。