四次元配列の一次元化
#include <stdio.h> #define O 2 #define P 3 #define Q 4 #define R 5 int main() { int i, j, k, l; int nums4[O][P][Q][R]; int nums1[O*P*Q*R]; for (i = 0; i < O; i++) { for (j = 0; j < P; j++) { for (k = 0; k < Q; k++) { for (l = 0; l < R; l++) { nums4[i][j][k][l] = i*P*Q*R + j*Q*R + k*R + l; printf("i:%d j:%d k:%d l:%d nums4:%d\n", i, j, k, l, nums4[i][j][k][l]); } } } } puts(""); for (i = 0; i < O; i++) { for (j = 0; j < P; j++) { for (k = 0; k < Q; k++) { for (l = 0; l < R; l++) { nums1[i*P*Q*R + j*Q*R + k*R + l] = nums4[i][j][k][l]; printf("i:%d j:%d k:%d l:%d nums1:%d\n", i, j, k, l, nums1[i*P*Q*R + j*Q*R + k*R + l]); } } } } puts(""); for (i = 0; i < O*P*Q*R; i++) { printf("i:%d nums1:%d\n", i, nums1[i]); } puts(""); printf("sizeof(nums4):%d sizeof(nums1):%d\n", sizeof(nums4)/sizeof(int), sizeof(nums1)/sizeof(int)); return 0; }
多分、あってる。
ソースコードに全然自信ないし、配列関係は間違いやすいから、扱いには十分注意してね。
世の中には、一次元配列が扱いやすい状況があったりするはず。
ていうか、一次元配列アクセスするときはfor文も一重化すれば見やすくなる。
追記
蛇足だけど、for文一重化してアクセスしたコードを追加した。