Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 1차원 배열 완벽 정리: 개념부터 선언, 초기화 방법까지

배열(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으로 채워집니다.
  • 초기화하지 않은 배열에는 쓰레기값이 남아 있으므로, 사용 전 반드시 초기화하는 습관이 필요합니다.