Если вы хотите использовать memcpy, данные должны быть последовательными. Я собираюсь попытаться объяснить это с помощью следующего кода.
Первая часть: я использую вашу матрицу, чтобы показать вам порядок данных в памяти.
Вторая часть: я переставляю данные не меняйте его, чтобы сохранить ваши данные)
Третья часть: я использую memcpy, как и вы.
У меня есть вопрос. Вы пытаетесь адаптировать некоторый код из фортрана в C?
#include <stdio.h>
#include <string.h>
int main()
{
//First part
int mat[4][2][4]={{{1,2,3,4},{10,20,30,40}},{{11,12,13,14},{110,120,130,140}},{{21,22,23,24},{210,220,230,240}},{{31,32,33,34},{310,320,330,340}}};
int *ptr=mat;
int i=0;
for (int z=0; z<4; z++) for (int y=0; y<2; y++) for (int x=0; x<4; x++) printf("mat(%d,%d,%d)=%d\n",x,y,z,ptr[i++]);
printf("\n------------------------\n\n");
//Second part
/* int mat[4][2][4]=
{{{1,2,3,4}, {10,20,30,40}},
{{11,12,13,14}, {110,120,130,140}},
{{21,22,23,24}, {210,220,230,240}},
{{31,32,33,34}, {310,320,330,340}}}; */
// Written like that to show "a sort of matrix transposition" (do not take this words mathematically)of left and right part.
int mat1[4][2][4]={
{{1,11,21,31}, {10,110,210,310}},
{{2,12,22,32}, {20,120,220,320}},
{{3,13,23,33}, {30,130,230,330}},
{{4,14,24,34}, {40,140,230,340}}
};
int *ptr1=mat1;
i=0;
for (int z=0; z<4; z++) for (int y=0; y<2; y++) for (int x=0; x<4; x++) printf("mat(%d,%d,%d)=%d\n",x,y,z,ptr1[i++]);
//Third part
int arr[4];
int index,idx;
for(index=0;index<2;index++){
memcpy(arr, &mat1[0][index], sizeof(arr));
for(idx=0;idx<4;idx++){
printf("%d\t",arr[idx]);
}
printf("\n");
}
return 0;
}