[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)
로 값을 읽어내실 수 있답니다