【发布时间】:2014-05-21 00:46:54
【问题描述】:
鉴于以下代码,我试图了解指针操作是否合法:
struct Foo{
int *temp1;
}
temp1 => 二维数组
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 数据吗:
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 数据吗:
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:是的。如果我使用向量(不,也不能使用 c++1x),我将不得不将数据复制到那些容器中,这对于这个要求来说是一个很大的禁忌。我有很多数据,将其复制到这些容器中需要很长时间,这在我的环境中是不可接受的。
-
听起来是个好理由。 :)
标签: c++ arrays pointers multidimensional-array