33.5 반복문으로 배열의 요소를 모두 출력하기

이번에는 반복문을 사용하여 배열의 요소를 모두 출력해보겠습니다.

array_for.c

#include <stdio.h>

int main()
{
    int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 };    // 크기가 10인 int형 배열

    for (int i = 0; i < sizeof(numArr) / sizeof(int); i++)    // 배열의 요소 개수만큼 반복
    {
        printf("%d\n", numArr[i]);    // 배열의 인덱스에 반복문의 변수 i를 지정
    }

    return 0;
}

실행 결과

11
22
33
44
55
66
77
88
99
110

반복문에서 for (int i = 0; i < sizeof(numArr) / sizeof(int); i++)처럼 조건식에 sizeof 연산자를 사용하여 배열의 요소 개수를 구한 뒤 반복하였습니다.

for (int i = 0; i < sizeof(numArr) / sizeof(int); i++)    // 배열의 요소 개수만큼 반복

반복문의 변수 i는 변화식을 통해 1씩 증가하므로 배열의 인덱스에 i를 넣으면 배열의 요소를 순서대로 모두 접근할 수 있습니다.

for (int i = 0; i < sizeof(numArr) / sizeof(int); i++)    // 배열의 요소 개수만큼 반복
{
    printf("%d\n", numArr[i]);    // 배열의 인덱스에 반복문의 변수 i를 지정
}

반복문으로 배열의 요소를 역순으로 출력할 수도 있겠죠?

array_for_reverse.c

#include <stdio.h>

int main()
{
    int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열

    for (int i = sizeof(numArr) / sizeof(int) - 1; i >= 0; i--)   // 요소 개수 - 1부터 역순으로 반복
    {
        printf("%d\n", numArr[i]);    // 배열의 인덱스에 반복문의 변수 i를 지정
    }

    return 0;
}

실행 결과

110
99
88
77
66
55
44
33
22
11

반복문으로 배열의 요소를 역순으로 출력할 때 주의할 점이 있습니다. 초깃값에 배열의 크기(요소 개수)를 바로 넣어버리면 처음부터 배열의 인덱스를 벗어난 상태가 됩니다.

int numArr[10];    // 요소가 10개
numArr[10];   // 10을 지정하면 배열의 인덱스를 벗어난 상태가 됨
numArr[9];    // 마지막 요소의 인덱스는 요소의 개수 - 1

배열의 인덱스는 0부터 시작하므로 마지막 요소의 인덱스는 요소의 개수에서 1을 빼줘야 합니다. 즉, 요소가 10개인 배열에서 마지막 요소의 인덱스는 9가 되겠죠? 따라서 다음과 같이 초기식에는 배열의 요소 개수를 구한 뒤 1을 빼주고, 조건식에는 "0보다 크거나 같을 때까지"를 지정하여 0까지 반복할 수 있도록 만듭니다.

for (int i = sizeof(numArr) / sizeof(int) - 1; i >= 0; i--)    // 요소 개수 - 1부터 역순으로 반복