34.4 2차원 배열의 크기 구하기

2차원 배열을 선언한 뒤 배열의 가로, 세로 크기를 늘려야 할 경우 관련된 반복문의 조건식도 함께 수정해야 하는데 빠뜨리고 넘어갈 수가 있습니다. 따라서 2차원 배열의 가로, 세로 크기를 구해놓고 반복문에 사용하면 실수를 방지할 수 있습니다.

2차원 배열이 차지하는 전체 공간과 가로, 세로 요소의 개수는 sizeof 연산자로 구할 수 있습니다. 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

two_dimensional_array_size.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 }
    };

    printf("%d\n", sizeof(numArr));    // 48: 4바이트 크기의 요소가 12(4*3)개이므로 48

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

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

    printf("%d\n", col);    // 4
    printf("%d\n", row);    // 3

    return 0;
}

실행 결과

48
4
3

sizeof로 2차원 배열의 크기를 구해보면 배열이 차지하는 전체 공간이 출력됩니다.

printf("%d\n", sizeof(numArr));    // 48: 4바이트 크기의 요소가 12(4*3)개이므로 48

가로(column, 행)의 요소 개수를 구하려면 sizeof(numArr[0])와 같이 가로 한 줄의 크기를 구한 뒤 요소의 크기로 나누면 됩니다.

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

세로(row, 열)의 요소 개수는 배열이 차지하는 전체 공간을 가로 한 줄의 크기로 나눠주면 됩니다.

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