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

C 언어에서 가변 크기 배열(VLA) 초기화 방법 완벽 정리

가변 크기 배열(VLA)이란?

가변 크기 배열(Variable Sized Array, VLA)은 컴파일 시점이 아니라 실행 시점(런타임)에 길이가 결정되는 데이터 구조입니다. 일반적인 정적 배열은 선언 시점에 상수로 크기를 지정해야 하지만, 가변 크기 배열은 사용자 입력이나 계산 결과처럼 실행 중에 결정되는 값을 배열의 크기로 사용할 수 있습니다.

이러한 배열은 수치 알고리즘 프로그래밍을 크게 단순화해 주며, 배열 크기를 미리 알 수 없는 상황에서 매우 유용합니다. C99 표준부터 가변 크기 배열이 정식으로 지원되었습니다.

C에서 가변 크기 배열 초기화 예제

다음은 C 언어에서 가변 크기 배열을 선언하고 초기화하는 방법을 보여주는 예제 프로그램입니다.

#include <stdio.h>

int main() {
    int n;

    printf("Enter the size of the array: \n");
    scanf("%d", &n);

    int arr[n];

    for(int i = 0; i < n; i++)
        arr[i] = i + 1;

    printf("The array elements are: ");

    for(int i = 0; i < n; i++)
        printf("%d ", arr[i]);

    return 0;
}

실행 결과

Enter the size of the array: 10
The array elements are: 1 2 3 4 5 6 7 8 9 10

프로그램 동작 원리

이제 위 프로그램이 어떻게 동작하는지 단계별로 살펴보겠습니다.

1. 런타임에 배열 크기 결정하기

위 프로그램에서 배열 arr[]는 사용자가 입력한 값에 따라 실행 시점에 길이가 결정되기 때문에 가변 크기 배열입니다. 핵심 코드는 다음과 같습니다.

int n;

printf("Enter the size of the array: \n");
scanf("%d", &n);

int arr[n];

먼저 변수 n을 선언하고, scanf() 함수를 통해 사용자로부터 배열의 크기를 입력받습니다. 그런 다음 int arr[n];처럼 변수 n을 배열의 크기로 사용하여 배열을 선언합니다. 이렇게 하면 프로그램이 실행될 때마다 서로 다른 크기의 배열을 생성할 수 있습니다.

2. 반복문을 이용한 배열 초기화 및 출력

배열의 각 요소는 for 반복문을 사용해 초기화되며, 이후 다시 반복문을 통해 모든 요소가 화면에 출력됩니다. 해당 코드는 다음과 같습니다.

for(int i = 0; i < n; i++)
    arr[i] = i + 1;

printf("The array elements are: ");

for(int i = 0; i < n; i++)
    printf("%d ", arr[i]);

첫 번째 반복문에서는 인덱스 i에 1을 더한 값(i + 1)을 각 배열 요소에 저장하여 배열을 초기화합니다. 두 번째 반복문에서는 초기화된 배열의 모든 요소를 순서대로 출력합니다.

가변 크기 배열 사용 시 주의사항

  • VLA는 선언과 동시에 초기화 리스트(int arr[n] = {1, 2, 3};)를 사용할 수 없으며, 반드시 반복문 등을 통해 개별 요소를 초기화해야 합니다.
  • 배열 크기는 0보다 커야 하며, 지나치게 큰 값을 입력하면 스택 오버플로우가 발생할 수 있으므로 입력값 검증이 필요합니다.
  • C11 표준에서 VLA는 선택 사항(optional)으로 변경되었기 때문에, MSVC 같은 일부 컴파일러에서는 지원하지 않을 수 있습니다. GCC나 Clang에서는 정상적으로 동작합니다.