2010-01-19 34 views
3

在C中,數組作爲指針傳遞給函數。結構可以通過值或地址(指針)傳遞給函數。有什麼特定的原因,我們不能按值傳遞數組,但我們可以通過值傳遞structre?將數組和數組傳遞給函數

回答

6

在C,一切是通過值。還有另外一條規則說,在大多數情況下,數組的名稱等同於指向其第一個元素的指針。將一個數組傳遞給一個函數就是這樣一個上下文。

所以,特殊情況並不是數組通過引用傳遞,特殊情況是the rule about arrays decaying to pointers。這給人的印象是數組通過引用傳遞(它實際上是這樣,但現在你知道爲什麼了!)

上面鏈接中的帖子更詳細地解釋了在不同上下文中的數組類型。

+0

指針通過val。 int * p1,int * p2; p1 = p2;這裏沒有參考。該地址從p2複製到p1。 – 2010-01-19 06:41:17

+0

是的,指針是按值傳遞的,就像其他的一樣。對於數組,*效果*就像通過引用傳遞一樣,但是因爲關於數組衰減爲指針的「規則」。當然,數組的第一個元素的指針值是按值傳遞的,但在這種情況下並不重要。 – 2010-01-19 06:43:14

+0

謝謝Alok!在指出的帖子中的解釋非常有幫助 – cppdev 2010-01-19 06:49:39