src라는 2차원 배열이 이렇게 있다고 할때,
1 2 3 4
5 6 7 8
9 6 3 1
2차원 배열을 1차원 배열로 변환해보겠습니다.
C코드로는 이렇게 정의할 수 있습니다.
#define NUMROWS 3
#define NUMCOLS 4
int src[NUMROWS][NUMCOLS];
int dst[NUMROWS * NUMCOLS];
그러면 다음의 이중 루프를 이용해서 2차원인 src 배열에서 값을 읽어내서 1차원인 dst 배열에 저장할 수 있습니다.
int i, j;
for (i = 0; i < NUMROWS; i++) {
for (j = 0; j < NUMCOLS; j++) {
dst[i * NUMCOLS + j] = src[i][j];
}
}
두 개의 loop 안에 있는 코드가 중요하겠죠. i * NUMCOLS + j는 i와 j가 변함에 따라
0 * 4 + 0 = 0
0 * 4 + 1 = 1
0 * 4 + 2 = 2
0 * 4 + 3 = 3
1 * 4 + 0 = 4
1 * 4 + 1 = 5
...
2 * 4 + 3 = 11
까지 변합니다.
근데 원래 C에서는 2차원 배열도 실제로는 1차원으로 되어 있거든요. 그러니까 굳이 복사하지 않고 array라는 배열 이름을 포인터로 해서
*(src + i * NUMCOLS + j)
로 값을 읽어낼 수 있습니다.