Programming,  컴퓨터와 인터넷

[C] 2차원 배열을 1차원 배열로 변환하기

wiki에 현행화해서 작성해두었습니다.

https://wiki.terzeron.com/Programming/C&C++/2차원배열을_1차원배열로_변환하기

[ CnUnix ] in KIDS
글 쓴 이(By): guest (C love) <203.247.66.44>
날 짜 (Date): 2000년 4월 27일 목요일 오후 02시 21분 37초
제 목(Title): [질] 2차원 배열 –> 1차원 배열 ??

C를 시작한지가 얼마 안되서….-_-;;

2차원 배열에 들어 있는 값들을 1차원 배열로 그대로 집어 넣으려면 어떻게 해야 할까요? 즉, a[i][j] 에 i*j 개의 값들이 들어 있는데 이 녀석들을 b[i*j] 에 행요소부터 순차적으로 담고 싶습니다.

무식한 게스트가 미리 감사드리며…

[ CnUnix ] in KIDS
글 쓴 이(By): terzeron (microkid)
날 짜 (Date): 2000년 4월 27일 목요일 오후 09시 39분 27초
제 목(Title): Re: [질] 2차원 배열 –> 1차원 배열 ??

array라는 2차원 배열이 이렇게 있다고 할때,

1 2 3 4
5 6 7 8
9 6 3 1

C코드로는 이렇게 되어있다고 하면,

#define NUMROWS 3
#define NUMCOLS 4

int array[NUMROWS][NUMCOLS];
int another[NUMROWS * NUMCOLS];
int i, j;

대충 이런 구조라면…

for (i = 0; i < NUMROWS; i++) {
for (j = 0; j < NUMCOLS; j++) {
another[i * NUMCOLS + j] = array[i][j];
}
}

두 개의 loop 안에 있는 코드가 중요하겠죠. i * NUMCOLS + j는 i와 j가 변함에 따라

0 * 4 + 0
0 * 4 + 1
0 * 4 + 2
0 * 4 + 3
1 * 4 + 0
1 * 4 + 1

2 * 4 + 3

까지 변합니다.

근데 원래 C에서는 2차원 배열도 실제로는 1차원으로 되어 있거든요. 그러니까 굳이 복사하지 않고 array라는 배열 이름을 포인터로 해서

*(array + i * NUMCOLS + j)

로 값을 읽어내실 수 있답니다

답글 남기기