이번 튜토리얼에서는 C/C++ 프로그램에서 다차원 배열(multidimensional array)을 초기화하는 방법에 대해 알아보겠습니다.
다차원 배열 선언의 기본 규칙
다차원 배열을 선언할 때 중요한 규칙이 하나 있습니다. 바로 가장 왼쪽(첫 번째) 차원의 크기는 비워둘 수 있지만, 나머지 모든 차원의 크기는 반드시 명시해야 한다는 점입니다.
컴파일러는 초기화 목록을 보고 첫 번째 차원의 크기를 자동으로 추론할 수 있기 때문입니다. 하지만 두 번째 차원 이후의 크기를 알아야 메모리 상에서 각 행(row)의 경계를 계산할 수 있으므로, 나머지 차원은 생략이 불가능합니다.
예제 코드
다음 예제를 통해 실제로 어떻게 동작하는지 확인해 보겠습니다.
#include<stdio.h>
int main(){
int a[][2] = {{1,2},{3,4}};
printf("%lu", sizeof(a));
getchar();
return 0;
}
실행 결과
16
코드 설명
위 예제에서 배열 a는 첫 번째 차원의 크기를 비워두고 선언되었습니다. 초기화 목록에 {1,2}와 {3,4}, 즉 두 개의 행이 존재하므로 컴파일러는 자동으로 배열의 크기를 int a[2][2]로 결정합니다.
실행 결과가 16인 이유는 다음과 같습니다.
- 배열은 2행 × 2열 = 총 4개의 int 요소를 가집니다.
- 일반적인 시스템에서 int는 4바이트이므로, 4 × 4바이트 = 16바이트가 됩니다.
정리
다차원 배열을 초기화할 때는 첫 번째 차원만 생략 가능하며, 나머지 차원은 반드시 지정해야 한다는 점을 기억하세요. 이 규칙은 C와 C++ 모두에 동일하게 적용됩니다. 생략된 첫 번째 차원은 초기화 요소의 개수를 기반으로 컴파일러가 자동으로 계산해 줍니다.