这是获取一半2D数组并将其“转换”为3D数组的正确方法吗?
#define CH_2D (6)
#define CH_3D (3)
float w_2d [65*CH_2D][2];
float (*w_3d)[65][CH_3D][2] = (void *) w_2d;
这样可以访问原始w_2d
的正确元素吗?
for(int i=0; i<65; i++)
{
for(int j=0; j<CH_3D; j++)
for(int k=0; k<2; k++)
float temp = (*w_3d)[i][j][k];
}
答案 0 :(得分:1)
我相信您的尝试有2个问题。
这是获取一半2D数组并将其“转换”为3D数组的正确方法吗?
不是。当实际类型为float[65][3][2]
(严格违反别名)时,您将取消引用类型为float[390][2]
的指针。要解决此问题,您需要通过禁用严格的别名来将C编译器置于非标准模式,或者只是重写代码以不执行此操作。
这会访问原始w_2d的正确元素吗?
这取决于您如何在原始阵列上存储数据。如果数据的存储顺序类似于:
float[2][65][3][2]
但是,从您的w_2d
声明中怀疑您的数据的排列方式如下:
float[65][6][2]
or
float[6][65][2]
在这种情况下,我怀疑您将获得所需的元素。