-
3차원 배열이란
2차원 배열에서 더 나아가 한 종류의 배열을 더 가진 배열이다.
1차원이 단순히 나열 즉 가로만 있었다면, 2차원은 가로 세로, 3차원은 가로, 세로, 높이까지 가지고 있다.
예를 들어 4각형을 기준으로 2차원 배열은 평면인 사각형이라면 3차원 배열은 3D로 된 사각형이다.
3차원 배열 만드는 법
3차원 배열은 자료형 + 배열 이름 + [높이][세로크기][가로크기]; 형식으로 만든다.
중괄호가 많이 쓰이기 때문에 주의해야 한다.
자료형 배열이름[높이][세로크기][가로크기] = { { { 값, 값, 값 }, { 값, 값, 값 } }, { { 값, 값, 값 }, { 값, 값, 값 } } }
#include <stdio.h> int main(void){ int scores[2][3][5] = { //자료형 + 배열명 + [높이]+[세로길이]+[가로길이] { {99, 90, 95, 93, 91}, {85, 89, 81, 83, 87}, {72, 74, 76, 77, 78} }, { {60, 64, 62, 67, 68}, {52, 53, 57, 58, 56}, {42, 44, 46, 47, 48} } }; printf("%d\n", scores[0][1][2]); // 81출력. printf("%d\n", scores[1][1][2]); // 57출력. }
3차원 배열 요소에 값 저장하기
#include <stdio.h> int main(void){ int scores[2][3][5]; scores[0][0][0] = 90; scores[0][0][1] = 90; scores[0][0][2] = 90; scores[0][0][3] = 90; scores[0][0][4] = 90; scores[0][1][0] = 90; scores[0][1][1] = 90; scores[0][1][2] = 90; scores[0][1][3] = 90; scores[0][1][4] = 90; scores[0][2][0] = 90; scores[0][2][1] = 90; scores[0][2][2] = 90; scores[0][2][3] = 90; scores[0][2][4] = 90; scores[1][0][0] = 90; scores[1][0][1] = 90; scores[1][0][2] = 90; scores[1][0][3] = 90; scores[1][0][4] = 90; scores[1][1][0] = 90; scores[1][1][1] = 90; scores[1][1][2] = 90; scores[1][1][3] = 90; scores[1][1][4] = 90; scores[1][2][0] = 90; scores[1][2][1] = 90; scores[1][2][2] = 90; scores[1][2][3] = 90; scores[1][2][4] = 90; }
3차원 배열의 가로, 세로, 높이 구하기
#include <stdio.h> int main(void){ int scores[2][3][5] = { { {99, 90, 95, 93, 91}, {85, 89, 81, 83, 87}, {72, 74, 76, 77, 78} }, { {60, 64, 62, 67, 68}, {52, 53, 57, 58, 56}, {42, 44, 46, 47, 48} } }; int all = sizeof(scores); // 120출력: (4바이트*30개) 3차원 배열이 가진 공간의 크기 int one = sizeof(scores) / sizeof(int); // 30출력: (120바이트/4바이트) 3차원 배열 내 요소들의 갯수 int heigh = sizeof(scores) / sizeof(scores[0]); // 2출력: (120바이트/60바이트) 면의 갯수, 3차원 배열의 크기 / 한 면의 크기 int row = sizeof(scores[0]) / sizeof(scores[0][0]); // 3출력: (60바이트 / 20바이트) 가로줄의 갯수, 한 면의 크기 / 한 줄의 크기 int column = sizeof(scores[0][0]) / sizeof(int); // 5출력: (20바이트 / 4) 세로줄의 갯수, 한 줄의 크기 / 요소 한개의 크기 printf("%d\n", all); printf("%d\n", one); printf("%d\n", heigh); printf("%d\n", row); printf("%d\n", column); }
3차원 배열의 포인터
3차원 배열을 포인터에 할당할 경우
"자료형 + (*포인터명)[세로줄의 크기][가로줄의 크기]"로 선언하면 된다.
#include <stdio.h> int main(void){ int scores[2][3][5] = { { {99, 90, 95, 93, 91}, {85, 89, 81, 83, 87}, {72, 74, 76, 77, 78} }, { {60, 64, 62, 67, 68}, {52, 53, 57, 58, 56}, {42, 44, 46, 47, 48} } }; int (*point)[3][5] = scores; // 자료형 + (*포인트명)[세로길이]][가로길이] printf("%p\n", point); //0x7ffc6c05f820 출력. printf("%p\n", *point);//0x7ffc6c05f820 출력. printf("%p\n", *scores);//0x7ffc6c05f820 출력. printf("%p\n", &scores);//0x7ffc6c05f820 출력. printf("%p\n", &point[0][0]); //0x7ffc6c05f820 출력. 모든 주소값이 같은 것으로 볼 때 //포인트된 초기값은 [0][0][0]에 맞춰져있다. printf("%p\n", &scores[0][0][0]); //0x7ffc6c05f820 출력. 모든 주소값이 같은 것으로 볼 때 //포인트된 초기값은 [0][0][0]에 맞춰져있다. printf("%d\n", point[0][0][0]); //99출력 printf("%d\n", point[0][1][2]); //81출력 printf("%d\n", point[1][1][2]); //57출력 printf("%d\n", scores[0][0][0]); //99출력 printf("%d\n", scores[0][1][2]); //81출력 printf("%d\n", scores[1][1][2]); //57출력 }