我想將一維數組指針和二維數組指針放入聯合中,這樣我就可以以任何方式訪問數據。在下面的程序中,我希望看到值9
通過兩種方式打印出來。如何在聯合中使用指針
#include <iostream>
class A {
public:
union {
int** array2D;
int* array1D;
};
A() {
array2D = new int*[1];
array2D[0] = new int[1];
}
};
int main() {
A a;
a.array2D[0][0] = 9;
cout << a.array2D[0][0] << endl;
cout << a.array1D[0] << endl;
cout << a.array2D << endl;
cout << a.array1D << endl;
}
實際輸出:
9
146989080
0x8c2e008 //Pointer address of array2D
0x8c2e008 //Pointer address of array1D
的地址是相同的,並且通過定義多維數組存儲在相同的方式,是一維陣列。我不知道爲什麼兩個cout
打印出不同的結果?我錯過了什麼?
編輯: 感謝以下答案,我可以看到我錯過了什麼。 用於從array1D訪問數據修復的方法是:
cout << *((int*) a.array1D[0]) << endl;
如果您不知道這一點,您的'array1D'就'持'指向'array2D'第一行的指針。 – WhozCraig 2013-04-23 06:13:19
@WhozCraig是的我沒有意識到這一點:D 我認爲使用'new'定位數組與聲明一個固定大小的數組是一樣的,這就是誤導了我。 – 2013-04-23 06:28:00