배열(Array)이란 무엇인가?
배열은 서로 관련된 여러 데이터를 하나의 공통된 이름 아래에 연속된 메모리 공간에 저장하는 자료 구조입니다. C 언어에서 배열을 활용하면 같은 자료형의 변수를 일일이 선언하지 않고도 반복문과 함께 효율적으로 대량의 데이터를 처리할 수 있습니다.
배열 선언 문법
C 언어에서 배열을 선언하는 기본 문법은 다음과 같습니다.
datatype array_name [size];
- datatype: 배열에 저장할 데이터의 자료형 (int, float, char 등)
- array_name: 배열의 이름
- size: 배열에 저장할 요소의 개수
배열의 종류
C 언어의 배열은 차원의 수에 따라 크게 세 가지로 분류됩니다.
- 1차원 배열 (One-dimensional array)
- 2차원 배열 (Two-dimensional array)
- 다차원 배열 (Multi-dimensional array)
1차원 배열
1차원 배열은 가장 기본적인 형태로, 데이터가 한 줄로 나란히 저장됩니다. 선언 문법은 다음과 같습니다.
datatype array_name [size];
예를 들어, 정수 5개를 저장할 수 있는 배열은 다음과 같이 선언합니다.
int a[5];
이때 배열의 인덱스는 0부터 시작하므로, a[5] 배열은 a[0]부터 a[4]까지 총 5개의 요소를 가집니다.
배열의 초기화 방법
C 언어에서 배열을 초기화하는 방법은 크게 두 가지입니다.
- 컴파일 시간 초기화 (Compile time initialization): 코드 작성 단계에서 값을 미리 지정
- 런타임 초기화 (Runtime initialization): 프로그램 실행 중 사용자로부터 값을 입력받아 지정
예제 1: 컴파일 시간 초기화
다음은 컴파일 시간에 배열을 초기화하는 C 프로그램입니다.
#include<stdio.h>
int main() {
int a[5] = {10, 20, 30, 40, 50};
int i;
printf("배열의 요소들은 다음과 같습니다\n");
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
return 0;
}실행 결과
배열의 요소들은 다음과 같습니다 10 20 30 40 50
예제 2: 런타임 초기화
다음은 실행 중 사용자에게 값을 입력받아 배열을 초기화하는 C 프로그램입니다.
#include<stdio.h>
int main() {
int a[5], i;
printf("정수 5개를 입력하세요: ");
for (i = 0; i < 5; i++)
scanf("%d", &a[i]);
printf("배열의 요소들은 다음과 같습니다\n");
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
return 0;
}실행 결과
정수 5개를 입력하세요: 10 20 30 40 50 배열의 요소들은 다음과 같습니다 10 20 30 40 50
두 초기화 방식의 차이점
- 컴파일 시간에 초기화된 프로그램은 소스 코드에 값이 고정되어 있으므로, 몇 번을 실행해도 항상 동일한 출력을 보여줍니다.
- 반면 런타임에 초기화된 프로그램은 실행할 때마다 사용자가 새로운 값을 입력할 수 있으므로, 실행할 때마다 출력 결과가 달라질 수 있습니다.
예제 3: 배열 초기화 규칙 이해하기
다음 예제는 배열을 전혀 초기화하지 않았을 때, 부분적으로만 초기화했을 때, 그리고 모든 요소를 초기화했을 때 각각 어떤 결과가 나오는지 보여줍니다.
#include <stdio.h>
int main(void) {
int a[4];
int b[4] = {1};
int c[4] = {1, 2, 3, 4};
int i; // 반복문 카운터
// 세 배열의 모든 요소 출력
printf("\n배열 a:\n");
for (i = 0; i < 4; i++)
printf("a[%d]: %d\n", i, a[i]);
printf("\n배열 b:\n");
for (i = 0; i < 4; i++)
printf("b[%d]: %d\n", i, b[i]);
printf("\n배열 c:\n");
for (i = 0; i < 4; i++)
printf("c[%d]: %d\n", i, c[i]);
return 0;
}실행 결과
배열 a: a[0]: 8 a[1]: 0 a[2]: 54 a[3]: 0 배열 b: b[0]: 1 b[1]: 0 b[2]: 0 b[3]: 0 배열 c: c[0]: 1 c[1]: 2 c[2]: 3 c[3]: 4
결과 해설
- 배열 a (초기화하지 않음): 초기화하지 않은 지역 배열에는 메모리에 남아 있던 임의의 값, 즉 쓰레기값(garbage value)이 들어 있습니다. 실행 환경에 따라 값이 달라질 수 있습니다.
- 배열 b (부분 초기화): 첫 번째 요소에만 1을 지정했지만, 나머지 요소들은 자동으로 0으로 초기화됩니다.
- 배열 c (전체 초기화): 중괄호 안에 지정한 순서대로 각 요소에 값이 저장됩니다.
핵심 정리
- 배열은 같은 자료형의 데이터를 하나의 이름으로 묶어 관리하는 자료 구조입니다.
- 배열의 인덱스는 0부터 시작하며, 크기가 n인 배열의 마지막 인덱스는 n-1입니다.
- 초기화는 컴파일 시간과 런타임 두 가지 방식으로 할 수 있으며, 부분 초기화 시 나머지 요소는 0으로 채워집니다.
- 초기화하지 않은 배열에는 쓰레기값이 남아 있으므로, 사용 전 반드시 초기화하는 습관이 필요합니다.