鑑於下面的代碼,我試圖理解,如果指針操作是合法的:我可以使用指針表示多維數組嗎?
struct Foo{
int *temp1;
}
temp1目錄=> 2D陣列
struct Foo1{
int temp1[2][2];
}
temp1目錄=> 3D陣列
struct Foo2{
int temp1[3][2][3];
}
我使用靜態數據爲Foo1和Foo2賦值。對於如:
Foo1 f1 =
{
{ 2, 4 },
{ 1, 3 }
};
Foo2 f2 =
{
{
{
{101, 102, 103},
{104, 105, 106},
},
{
{107, 108, 109},
{110, 111, 112},
},
{
{113, 114, 115},
{116, 117, 118},
},
}
};
我可以從Foo1引用富數據是這樣的:
Foo f;
f.temp1 = (int*)f1.temp1;
for(int i = 0; i < 2; ++i)
{
for(int j = 0; j < 2; ++j)
{
cout << "i " << i << " j " << j << " value: " << f.temp1[(i * 2) + j] << endl;
}
}
我可以從foo2的引用富數據是這樣的:
Foo f;
f.temp1 = (int*)f2.temp1;
for(int i = 0; i < 3; ++i)
{
for(int j = 0; j < 2; ++j)
{
for(int k = 0; k < 3; ++k)
{
cout << "i " << i << " j " << j << " k " << k << " value: " << f.temp1[(i * 3 * 2) + (j * 2) + k] << endl;
}
}
}
從本質上講,我假設數組將被安排在連續的內存中,我可以像這樣解除引用它嗎?
你有充分的理由*不*使用STD容器嗎? – Biffen
@Biffen:是的。如果我使用矢量(也不行,不能做C++ 1x),我將不得不將數據複製到這些容器中,這對於這個要求來說是一個很大的禁忌。我有很多數據並將其複製到這些容器中需要很長時間,這在我的環境中是不可接受的。 – brainydexter
聽起來是一個很好的理由。 :) – Biffen