C언어
3차원 배열
ksge7
2020. 7. 13. 06:09
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출력
}