큐빅퍼즐은 3차원의 구조
가로, 세로, 높이가 있음
3차원 배열은 중심부의 블록이 채워진 형태의 큐빅퍼즐에 비유할 수 있음
3차원 배열 : 가로와 세로로 이뤄진 2차원 배열 + 높이의 개념
int arr1[2][3][4]; // 높이 2, 세로 3, 가로 4인 int형 3차원 배열
double arr2[5][5][5]; // 높이 5, 세로 5, 가로 5인 double형 3차원 배열
배열의 크기 확인
#include <stdio.h>
int main(void)
{
int arr1[2][3][4];
double arr2[5][5][5];
printf("높이2, 세로3, 가로4 int형 배열 : %d\n", sizeof(arr1));
printf("높이5, 세로5, 가로5 double형 배열 : %d\n", sizeof(arr2));
}
3차원 배열의 선언과 접근
예제 : 고등학교 3학년 전체 학생의 국어와 수학점수를 반별로 구분 → 반별 학생수 3명, 학급의 수 3명
#include <stdio.h>
int main(void)
{
int mean = 0;
int record[3][3][2] =
{
{
{70, 80}, // A 학습 학생 1의 성적
{94, 90}, // A 학습 학생 2의 성적
{70, 85}// A 학습 학생 3의 성적
},
{
{83, 90}, // B 학습 학생 1의 성적
{95, 60}, // B 학습 학생 2의 성적
{90, 82} // B 학습 학생 3의 성적
},
{
{98, 89}, // C 학습 학생 1의 성적
{99, 94}, // C 학습 학생 2의 성적
{91, 87} // C 학습 학생 3의 성적
}
};
for (int i = 0; i < 3; i++)
for (int j = 0; j < 2; j++)
mean += record[0][i][j];
printf("A 학습 전체 평균 : %g \n", (double)mean / 6);
mean = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 2; j++)
mean += record[1][i][j];
printf("B 학습 전체 평균 : %g \n", (double)mean / 6);
mean = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 2; j++)
mean += record[2][i][j];
printf("C 학습 전체 평균 : %g \n", (double)mean / 6);
printf("\n\nfor문으로 묶어버리기!!!!!!!!!!\n");
/* for문으로 묶기 */
mean = 0;
for (int room = 0; room < 3; room++)
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 2; j++)
mean += record[room][i][j];
printf("학습 전체 평균 : %g \n", (double)mean / 6);
mean = 0;
}
}
위 for문으로 묶기를 보면 중간에 중괄호가 있는데 이는 반복되는 문장이 하나가 아니기 때문이다
3차원 배열은 여러 개의 2차원 배열이 모여있는 형태로 이해하는 것이 더 합리적
즉 int record[3][3][2] 라고하면
세로 가로의 길이가 3과 2인 int형 배열 세 개가 겹쳐 있는 것으로 이해가 편할 것임
참고 : [윤성우 열혈 C 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.
'Language&Framework&Etc > C' 카테고리의 다른 글
포인터의 포인터(17-2) 다중 포인터 변수와 포인터의 필요성 (0) | 2020.12.10 |
---|---|
포인터의 포인터(17-1) 포인터의 포인터에 대한 이해 (0) | 2020.12.09 |
다차원 배열(16-1) 다차원 배열의 이해와 활용 (0) | 2020.12.09 |
포인터와 함수에 대한 이해(14-3) 포인터 대상의 const 선언 (0) | 2020.12.08 |
포인터와 함수에 대한 이해(14-2) Call-by-value vs Call-by-reference (0) | 2020.12.08 |