Конвертировать 2D массив в 3D? - PullRequest
1 голос
/ 09 апреля 2019

Это правильный способ взять половину двумерного массива и "преобразовать" его в трехмерный массив?

#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 Ответ

1 голос
/ 09 апреля 2019

Я полагаю, у вас есть 2 проблемы с вашей попыткой.

Это правильный способ взять половину двумерного массива и "преобразовать" его в трехмерный массив?

Это не так.Вы разыменовываете указатель с типом 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]

В этомВ случае, если я сомневаюсь, что вы получите нужные элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...