배열(Array)은 데이터를 연속된(contiguous) 메모리 공간에 순차적으로 저장하는 가장 기본적인 자료구조입니다. 같은 타입의 여러 값을 하나의 이름으로 관리할 수 있어 효율적이며, 인덱스를 통해 각 요소에 빠르게 접근할 수 있습니다.
배열 선언하기
C++에서 배열은 다음과 같은 문법으로 선언합니다.
int arr[5]; // 1차원(1-D) 배열 선언 int arr[3][3]; // 2차원(2-D) 배열 선언
선언과 동시에 초기화할 때, 지정한 요소의 개수보다 적은 값만 넣으면 나머지 요소는 자동으로 0으로 초기화됩니다. 이 특징은 뒤에서 다룰 연습 문제의 핵심 포인트입니다.
배열 요소의 메모리 주소 계산
배열은 메모리에 연속적으로 저장되기 때문에, 기준 주소(base address)와 인덱스만 알면 각 요소의 실제 주소를 계산할 수 있습니다.
1차원 배열 : address[i] = baseAddress + i × size 2차원 배열(행 우선, row major) : address[i][j] = baseAddress + (i×n + j) × size
여기서 size는 요소 하나가 차지하는 바이트 크기(예: int형은 보통 2 또는 4바이트), n은 2차원 배열의 열(column) 개수입니다.
연습 문제 1 — 출력 예측하기
다음 코드의 실행 결과를 예측해 보세요.
int arr[5] = {6, 9};
for(int i = 0; i < 5; i++)
cout << arr[i] << " ";출력 결과
6 9 0 0 0
해설: 배열을 선언하면서 두 개의 값(6, 9)만 초기화했기 때문에, 남은 세 개의 요소는 앞서 설명한 규칙에 따라 모두 0으로 채워집니다. 출력 결과에 그대로 반영됩니다.
연습 문제 2 — 2차원 배열 접근
int arr[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << arr[1][2];출력 결과
6
해설: 9개의 값이 열 개수 3을 기준으로 행 단위로 채워집니다. 즉 첫 번째 행은 {1, 2, 3}, 두 번째 행은 {4, 5, 6}이 되므로, arr[1][2](두 번째 행의 세 번째 요소)는 6입니다.
연습 문제 3 — 메모리 주소 직접 계산하기
기준 주소(base address)가 1420일 때, 정수 배열에서 주어진 요소의 주소를 구해 보세요.
1차원 배열 : arr[43] address = 1420 + 43 × 2 = 1506 2차원 배열(arr[10][10], 행 우선 저장) : arr[5][4] address = 1420 + (5×10 + 4) × 2 = 1420 + 54 × 2 = 1528
해설: int형 크기를 2바이트로 가정했습니다. 1차원 배열은 인덱스에 크기를 곱해 더하고, 2차원 배열은 행 우선(row major) 방식으로 (i×n + j)를 이용해 일렬 위치를 구한 뒤 동일하게 계산합니다.
이처럼 배열의 초기화 규칙과 주소 계산 공식을 이해하면, 메모리 구조를 깊이 있게 파악할 수 있고 코딩 테스트나 면접에서 자주 등장하는 배열 관련 문제도 자신 있게 해결할 수 있습니다.