2012-01-07 124 views
0

當我將2D數組傳遞給函數或二維數組時,是否需要放置「&」,自動按照1Ds的引用進行操作。傳遞多維數組C++

void fnc (int& arr[5][5]) { 
} 
+3

1D數組不會自動通過引用傳遞... – 2012-01-07 16:24:12

+1

int&arr [5] [5]' - >'arr'是兩個int類型的暗淡數組,你想要那個嗎? – 2012-01-07 16:27:18

+0

我的意思是,但在我的代碼中,我感興趣地通過值傳遞,但函數結束後,arr的值發生了變化。 – Shibli 2012-01-07 16:29:25

回答

2

它將按值傳遞,如果你不通過引用&指定通。

但是數組衰減爲指針,所以你基本上是按值傳遞一個指針,這意味着它指向的內存將是相同的。

通常而言,修改arr函數內部會修改原始的arr(不會創建副本)。

此外,一維數組也不會被自動「通過引用」傳遞,它只是因爲它們衰變爲指針而出現。

+0

所以,如果我想修改傳遞的數組,我需要爲2D數組放置「&」嗎? – Shibli 2012-01-07 16:33:25

+0

@Shibli不,你不應該。再次閱讀答案。 – yoni 2012-01-07 16:35:17

+0

@Shibli,根本不是我說的。一個直接的答案是你可以通過它沒有參考,它仍然會在外面修改。但試着去理解答案,因爲從長遠來看,這將會更有幫助。 – 2012-01-07 16:37:36

2

如果你真的想通過參考陣列傳遞將需要:

void fnc(int (&arr)[5][5]); 

沒有內部括號,如阿努比斯先生說,你會試圖通過引用數組這是不可能的有幫助。

通常一個只會寫

void fnc(int arr[][5]); 

(你可以寫arr[5][5],但前5個被忽略,這可能會導致混亂。)

這傳遞數組的地址,而不是陣列本身,我認爲這是你想要達到的目標。

您還應該考慮向量或其他更高級別數據結構的向量;原始數組對於粗心大意有許多陷阱。