2014-10-20 64 views
2

我有(整數的)載體的陣列,我想將它傳遞給一個成員函數作爲參考,以便可以對其進行修改。 (它實際上是我的函數的輸出,但我已經有一個返回值。)傳遞載體的陣列作爲函數參數來改變原始值

我寫了這樣的事情

int Dag::dag2array(vector<int> (&aVectors)[4]) 
{ 
//some stuff 
//calling another function tree2array(aVectors) 
//passing the same array as reference 
} 

它編譯和運行,雖然它看起來沒有做我想要的。

在一個或多或少相反的問題(Passing array of vectors as a function parameter (values will not change))中,答案說該數組可以在沒有&的情況下進行修改,並且它不會創建副本,但它就像一個指針。

  1. 爲什麼像一個int一個變量需要&避免 複製,並能夠修改「對飛」,而不是一個數組的原始變量的值?
  2. 我應該使用&還是不是在我的情況?
+1

你的問題不清楚。代碼實際上做什麼而不是你想要的? – 2014-10-20 13:47:00

+1

一組向量?這只是邪惡。使用C++或C,而不是兩個! – matsjoyce 2014-10-20 13:54:52

+1

嘗試'矢量>&' – 2014-10-20 13:56:38

回答

0

當一個數組傳遞給一個函數時,它的類型被調整爲指向其第一個元素的指針。同樣,形式爲T[N]的參數聲明被調整爲T*。傳遞的指針被複制,但矢量的元素根本不被複制。這意味着在解引用指針時,仍然可以通過數組訪問語法array[n](它實際上只是指針算術:*(array + n))來引用原始數組元素。

如果你是按值傳遞一個實際對象的功能,將出現一個副本,如果你仍然想修改你將需要一個元素基準。

所以,不,你不需要通過引用傳遞數組。除非你想訪問函數中數組的大小(因爲數組到指針的衰減會丟棄數組的大小)。

3

這是C陣列使生活困難的情況之一。我強烈建議使用std::array(或者std::tr1::array,如果您尚未使用C++ 11)。而不是晦澀的語法,說

int func(std::array<std::vector<int>, 4>& vectors) 

使得它很清楚,你要傳遞的4個向量數組引用,從而可以修改值說

vectors[1][2] = 19; 

或什麼有-您。