1 次元配列ポインターと 2 次元配列ポインターの両方を共用体に入れたいので、どちらの方法でもデータにアクセスできます。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
アドレスは同一であり、定義により、多次元配列は 1 次元配列と同じ方法で格納されます。なぜ 2 つcout
の s が異なる結果を出力するのだろうか? 私は何を取りこぼしたか?
編集:以下の回答のおかげで、私が見逃したものを見ることができます。array1D からデータにアクセスするための修正は次のとおりです。
cout << *( (int*) a.array1D[0]) << endl;