프로그래밍/C 기초

[C언어 강좌] #15 - 다차원 배열

도끼_Dokki 2016. 12. 21. 09:00

저번에 배열에 대해 배워봤으니 이번엔 다차원배열에 대해 배워봅시다.

2차원 배열 이상의 배열을 다차원배열이라고 하는데요.





2차원 이상의 배열은 배열 뒤에 한번더 배열을 넣는식으로 만들수있습니다.

배열마다 배열이 있는 느낌이라고 보면 됩니다.


우리가 보통 아는 1차원은 선이고 2차원은 면이고 3차원이 입체적인 도형이되죠.

1배열도 비슷하게 받아들일수 있습니다.







우리가 아는 1차원이 선이고 2차원이 면인것처럼 배열도 1차원은 선이고 2차원은 면이됐습니다.

배열의 크기가 [5], [5]일경우 5x5크기의 배열이 만들어지게됩니다.


3차원배열은 한단계 더나가서 저 면이 여러개 쌓이겠죠.

이렇게요 (그림을 못그려서 죄송합니다..)



그리고 실제로 메모리에 저런식으로 저장되는건 아니고 일자형태로 저장됩니다.

순서대로 주소값이 증가하는 형태겠죠.


b[0][0]과b[0][1]의 주소값을 비교해보면 4가 늘어난걸 볼수있죠. 4바이트이므로 한칸 이동한겁니다.





초기화는 위와같은 방식들로 할수 있습니다. 첫번째방식으로 하나 두번째방식으로 하나 똑같습니다.

대신 첫번째방법으로 하면 구분이 쉬워지겠죠


근데 저번에 b[  ]의 빈공간에 들어가는 숫자만큼 메모리공간을 이동하는것이라고 했습니다.

참고로 저기 넣는 숫자를 인덱스라고 합니다.




저번에 봤던 그림이죠? 1차원배열에서는 인덱스값이 3일경우 3칸 이동했었습니다.


2차원배열에서는 첫번째 인덱스값은 두번째 인덱스값의 최대만큼 곱해줘야합니다.

예를들면 int b[5][5];라는 2차원 배열이 있을때 b[2][0]일경우 2 * 5를 해서 10칸만큼 이동하게됩니다.

거기에 변수의 타입에따라서 바이트수까지 곱해주면 실제로 주소가 증가하는 값이 되겠죠.



int형은 4바이트이므로 2 * 5 * 4 ( 40 )만큼 이동한걸 볼수 있습니다.


그래서 b[2][0] , b[0][10] , b[1][5] 이렇게 쓸경우 모두 똑같은 기능을 하게됩니다.



결국 모두 똑같은만큼 메모리공간을 이동하기때문에 같은 결과가 나오게됩니다.


3차원배열도 마찬가지로 int b[10][10][10]; 과 같은 형태로 사용이 가능합니다.

뒤에 5개를 붙이면 5차원배열이되고 10개를 붙이면 10차원배열이 되는겁니다.