2016-09-16 21 views
0

中返回C++數組指針首先,我做了返回Array [2]指針的函數。如何在方法

int* ReturnArray(int a, int b) { 
    static int Array[2]; 


    Array[0] = a; 
    Array[1] = b; 

    return Array; 
} 

而且我在Main中製作了簡單的2維數組。

int a, b; 
in >> NumberOfSize; 
int** S = new int*[NumberOfSize]; 
for (int i = 0; i < NumberOfSize; i++) 
    S[i] = new int[2]; 

最後,我添加ReturnArray(A,B)來設置S [I]

for (int i = 0; i < NumberOfSize; i++) 
{ 
    in >> a >> b; 
    S[i] = ReturnArray(a, b); 
} 

但在主,我無法得到在陣列S [I]合適的值[j的值]。 當我改變上部的方式下,我可以設置在陣列S.

for (int i = 0; i < NumberOfSize; i++) 
{ 
    in >> a >> b; 
    S[i][0] = ReturnArray(a, b)[0]; 
    S[i][1] = ReturnArray(a, b)[1]; 
} 

正確的價值在什麼上的方式happended?

而我怎樣才能得到正確的價值只有一個調用ReturnArray函數?

(對不起我的傻瓜英語。)

+3

如果您使用的是標準庫組件(例如'std :: array'),我認爲您不會遇到任何問題。 – Hurkyl

+2

請閱讀「靜態」的含義。 –

+1

'S [i] = ReturnArray(a,b);'表示您將'S [i]指向靜態數組。它並不意味着複製數組內容。 –

回答

1

那就是你在功能static局部變量的問題,這意味着對函數的所有調用將共享相同的陣列和修改相同的陣列,這意味着只有上次調用中設置的值纔是您使用的值。

解決此問題的一種方法是,像您在工作示例中那樣分別進行動態分配和複製值。另一種可能的解決方案是使用具有適當拷貝語義的另一數據結構,例如, std::pairstd::tuple,並且在該函數中沒有任何靜態數組(或者任何其他東西static)。

+0

我覺得我的工作例子很浪費,因爲做了兩次同樣的工作 –

+0

謝謝你的快速回答 –