다차원 배열
정의
배열의 요소가 여러 개의 차원으로 나열된 배열
선언
1
2
3
4
자료형 배열명[행의 수][열의 수];
int array_2[2][3]; // 2차원 배열
int array_3[3][2][3]; // 3차원 배열
int array_3_2[][2][3]; // 가장 바깥 차원은 개수 생략 가능
2차원 배열의 선언과 초기화
선언
1
2
3
// 2차원 배열 선언
자료형 배열명[행의 수][열의 수];
int array_2[2][3];
- 열의 수 : 한 행을 구성하는 1차원 배열의 크기
- 행의 수 : 열의 수로 지정한 크기의 1차원 배열의 수
- 배열의 전체 크기 = $행의 수 \times 열의 수$
초기화
1
2
3
int a[2][3] = {1, 2, 4, 5, 6};
int b[2][3] = { {1, 2}, {4, 5, 6} };
int c[][3] = { {1, 2}, {4, 5, 6} };
- 차원의 구분을 무시하고 연속적으로 요소를 나열해도 된다.
- 가시성을 위해 각 행을 중괄호로 묶을 수도 있다.
- 배열의 크기에 비해 적은 수의 값만 초기화할 경우, 나머지는 0으로 초기화된다.
- 배열을 하나의 중괄호로 묶는지, 두 개의 중괄호로 묶는지에 따라 0이 되는 요소의 순서는 달라질 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void array_2d() {
int a[2][3] = {1, 2, 4, 5, 6};
int b[2][3] = { {1, 2}, {4, 5, 6} };
int c[][3] = { {1, 2}, {4, 5, 6} };
char array_names[] = {'a', 'b', 'c'};
int(*arrays[])[3] = {a, b, c};
for (int n = 0; n < 3; n++) {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%c[%d][%d] = %d ", array_names[n], i, j, arrays[n][i][j]);
}
printf("\n");
}
printf("\n");
}
}
1
2
3
4
5
6
7
8
a[0][0] = 1 a[0][1] = 2 a[0][2] = 4
a[1][0] = 5 a[1][1] = 6 a[1][2] = 0 # 6번째 요소가 0이 됨
b[0][0] = 1 b[0][1] = 2 b[0][2] = 0 # 3번째 요소가 0이 됨
b[1][0] = 4 b[1][1] = 5 b[1][2] = 6
c[0][0] = 1 c[0][1] = 2 c[0][2] = 0
c[1][0] = 4 c[1][1] = 5 c[1][2] = 6
3차원 배열의 선언과 초기화
선언
1
2
자료형 배열명[면의 수][행의 수][열의 수];
자료형 배열명[3차원의 수][2차원의 수][1차원의 수];
- 열의 수 : 한 행을 구성하는 1차원 배열의 크기
- 행의 수 : 열에 해당하는 1차원 배열의 개수
- 면의 수 : 행과 열에 해당하는 2차원 배열의 개수
- 배열의 전체 크기 = $면의 수 \times 행의 수 \times 열의 수$
초기화
1
2
3
4
int a[2][3][4] = {
{ {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} },
{ {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} }
}
1
2
3
4
int a[][3][4] = {
{ {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} },
{ {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} }
}
Reference
C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)
Comments