33.3 배열의 요소에 값 할당하기

배열은 [ ]로 요소에 접근한 뒤 값을 할당할 수 있습니다.

  • 배열[인덱스] = 값;

array_element_assign.c

#include <stdio.h>

int main()
{
    int numArr[10];     // 크기가 10인 배열 선언
    
    numArr[0] = 11;     // 인덱스가 0인 배열의 요소에 값 할당
    numArr[1] = 22;     // 인덱스가 1인 배열의 요소에 값 할당
    numArr[2] = 33;     // 인덱스가 2인 배열의 요소에 값 할당
    numArr[3] = 44;     // 인덱스가 3인 배열의 요소에 값 할당
    numArr[4] = 55;     // 인덱스가 4인 배열의 요소에 값 할당
    numArr[5] = 66;     // 인덱스가 5인 배열의 요소에 값 할당
    numArr[6] = 77;     // 인덱스가 6인 배열의 요소에 값 할당
    numArr[7] = 88;     // 인덱스가 7인 배열의 요소에 값 할당
    numArr[8] = 99;     // 인덱스가 8인 배열의 요소에 값 할당
    numArr[9] = 110;    // 인덱스가 9인 배열의 요소에 값 할당

    printf("%d\n", numArr[0]);    // 11: 배열의 첫 번째(인덱스 0) 요소 출력
    printf("%d\n", numArr[5]);    // 66: 배열의 여섯 번째(인덱스 5) 요소 출력
    printf("%d\n", numArr[9]);    // 110: 배열의 열 번째(인덱스 9) 요소 출력

    return 0;
}

실행 결과

11
66
110

배열의 요소를 출력할 때와 마찬가지로 [ ]에 인덱스를 지정한 뒤 값을 할당하면 됩니다.

그렇다면 배열의 범위를 벗어난 인덱스에 접근하면 어떻게 될까요? 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

array_invalid_index.c

#include <stdio.h>

int main()
{
    int numArr[10];    // 크기가 10인 배열 선언

    numArr[0] = 11;    // 인덱스가 0인 배열의 요소에 값 할당
    numArr[1] = 22;    // 인덱스가 1인 배열의 요소에 값 할당
    numArr[2] = 33;    // 인덱스가 2인 배열의 요소에 값 할당
    numArr[3] = 44;    // 인덱스가 3인 배열의 요소에 값 할당
    numArr[4] = 55;    // 인덱스가 4인 배열의 요소에 값 할당
    numArr[5] = 66;    // 인덱스가 5인 배열의 요소에 값 할당
    numArr[6] = 77;    // 인덱스가 6인 배열의 요소에 값 할당
    numArr[7] = 88;    // 인덱스가 7인 배열의 요소에 값 할당
    numArr[8] = 99;    // 인덱스가 8인 배열의 요소에 값 할당
    numArr[9] = 110;   // 인덱스가 9인 배열의 요소에 값 할당

    printf("%d\n", numArr[-1]);    // 음수이므로 잘못된 인덱스
    printf("%d\n", numArr[10]);    // 배열의 범위를 벗어난 인덱스
    printf("%d\n", numArr[20]);    // 배열의 범위를 벗어난 인덱스

    return 0;
}

실행 결과

-858993460 (쓰레기 값)
-858993460 (쓰레기 값)
13651968   (쓰레기 값)

배열의 요소에 접근할 때 인덱스로 음수를 지정하거나, 배열의 크기를 벗어난 인덱스를 지정해도 컴파일 에러가 발생하지 않습니다. 하지만 실행을 해보면 쓰레기값이 출력됩니다. 즉, 배열의 범위를 벗어난 인덱스에 접근하면 배열이 아닌 다른 메모리 공간에 접근하게 됩니다.

만약 배열의 범위를 벗어난 접근을 하여 값을 할당해버리면 엉뚱한 메모리에 값을 저장하게 되어 프로그램이 정상적으로 실행되지 않을 수 있으므로 주의해야 합니다.