다차원 배열

정의

배열의 요소가 여러 개의 차원으로 나열된 배열

선언

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