将2D阵列转换为3D?

时间:2019-04-09 09:20:46

标签: c

这是获取一半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]; 
}

1 个答案:

答案 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]

在这种情况下,我怀疑您将获得所需的元素。