34.5 반복문으로 2차원 배열의 요소를 모두 출력하기

반복문을 사용하여 2차원 배열의 요소를 모두 출력해보겠습니다.

two_dimensional_array_for.c

#include <stdio.h>

int main()
{
    int numArr[3][4] = {    // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언
        { 11, 22, 33, 44 },
        { 55, 66, 77, 88 },
        { 99, 110, 121, 132 }
    };

    int col = sizeof(numArr[0]) / sizeof(int);    // 4: 2차원 배열의 가로 크기를 구할 때는 
                                                  // 가로 한 줄의 크기를 요소의 크기로 나눠줌

    int row = sizeof(numArr) / sizeof(numArr[0]); // 3: 2차원 배열의 세로 크기를 구할 때는 
                                    // 배열이 차지하는 전체 공간을 가로 한 줄의 크기로 나눠줌

    for (int i = 0; i < row; i++)    // 2차원 배열의 세로 크기만큼 반복
    {
        for (int j = 0; j < col; j++)    // 2차원 배열의 가로 크기만큼 반복
        {
            printf("%d ", numArr[i][j]); // 2차원 배열의 인덱스에 반복문의 변수 i, j를 지정
        }
        printf("\n");                // 가로 요소를 출력한 뒤 다음 줄로 넘어감
    }

    return 0;
}

실행 결과

11 22 33 44
55 66 77 88
99 110 121 132

먼저 배열의 세로 크기와 가로 크기를 구해줍니다. 그리고 for 반복문으로 세로부터 반복한 뒤 가로를 반복하면서 2차원 배열의 요소를 출력합니다.

for (int i = 0; i < row; i++)    // 2차원 배열의 세로 크기만큼 반복
{
    for (int j = 0; j < col; j++)    // 2차원 배열의 가로 크기만큼 반복
    {

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

printf("%d ", numArr[i][j]); // 2차원 배열의 인덱스에 반복문의 변수 i, j를 지정

그럼 역순으로도 출력할 수 있겠죠?

two_dimensional_array_for_reverse.c

#include <stdio.h>

int main()
{
    int numArr[3][4] = {    // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언
        { 11, 22, 33, 44 },
        { 55, 66, 77, 88 },
        { 99, 110, 121, 132 }
    };

    int col = sizeof(numArr[0]) / sizeof(int);    // 4: 2차원 배열의 가로 크기를 구할 때는 
                                                  // 가로 한 줄의 크기를 요소의 크기로 나눠줌

    int row = sizeof(numArr) / sizeof(numArr[0]); // 3: 2차원 배열의 세로 크기를 구할 때는 
                                    // 배열이 차지하는 전체 공간을 가로 한 줄의 크기로 나눠줌

    for (int i = row - 1; i >= 0; i--)    // 세로 크기 - 1부터 역순으로 반복
    {
        for (int j = col - 1; j >= 0; j--)    // 가로 크기 - 1부터 역순으로 반복
        {
            printf("%d ", numArr[i][j]);      // 2차원 배열의 인덱스에 반복문의 변수 i, j를 지정
        }
        printf("\n");                    // 가로 요소를 출력한 뒤 다음 줄로 넘어감
    }

    return 0;
}

실행 결과

132 121 110 99
88 77 66 55
44 33 22 11

반복문의 초깃값에 배열의 세로 크기와 가로 크기를 바로 넣어버리면 처음부터 배열의 인덱스를 벗어난 상태가 됩니다. 즉, 배열의 인덱스는 0부터 시작하므로 마지막 요소의 인덱스는 요소의 개수에서 1을 빼줍니다. 그리고 0까지 반복할 수 있도록 조건식을 i >= 0과 같이 지정하면 됩니다.

for (int i = row - 1; i >= 0; i--)    // 세로 크기 - 1부터 역순으로 반복
{
    for (int j = col - 1; j >= 0; j--)    // 가로 크기 - 1부터 역순으로 반복
    {