34.1 2차원 배열을 선언하고 요소에 접근하기

2차원 배열은 [ ] (대괄호)를 두 번 사용하여 선언하며 첫 번째 대괄호에는 세로 크기, 두 번째 대괄호에는 가로 크기를 지정합니다. 일반적으로 2차원 공간은 가로x세로로 표기하지만 배열로 만들 때는 세로x가로로 표기합니다. 꼭 기억해두세요.

  • 자료형 배열이름[세로크기][가로크기];
  • 자료형 배열이름[세로크기][가로크기] = { { 값, 값, 값 }, {값, 값, 값} };

다음은 세로 크기가 3, 가로 크기가 4인 int형 2차원 배열을 선언하는 방법입니다. 2차원 배열을 선언하면서 초기화하려면 { } (중괄호)를 사용하는데 가로 요소들을 먼저 묶어주고, 가로 줄을 세로 크기 만큼 다시 묶어줍니다. { } 안의 값과 줄 개수는 가로, 세로 크기보다 작아도 되지만 크면 안 됩니다.

int numArr[3][4] = {
    { 가로 요소 4 },
    { 가로 요소 4 },
    { 가로 요소 4 }
}; //       ↑ 세로 3줄

{ }를 사용하여 배열에 값을 할당하는 방법은 배열을 선언할 때만 사용할 수 있으며 이미 선언된 배열에는 사용할 수 없습니다.

2차원 배열의 요소에 접근하려면 배열 뒤에 [ ] (대괄호)를 두 번 사용하며 [ ] 안에 세로와 가로 인덱스를 지정해주면 됩니다.

  • 배열[세로인덱스][가로인덱스]

즉, 다음과 같이 2차원 배열에서 세로 인덱스 1, 가로 인덱스 2인 요소의 값을 가져올 수 있습니다.

int num1 = numArr[1][2];    // 2차원 배열에서 세로 인덱스 1, 가로 인덱스 2인 요소에 접근

이제 2차원 배열을 선언하고 요소의 값을 출력해보겠습니다.

two_dimensional_array.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", numArr[0][0]);    // 11 : 세로 인덱스 0, 가로 인덱스 0인 요소 출력
    printf("%d\n", numArr[1][2]);    // 77 : 세로 인덱스 1, 가로 인덱스 2인 요소 출력
    printf("%d\n", numArr[2][0]);    // 99 : 세로 인덱스 2, 가로 인덱스 0인 요소 출력
    printf("%d\n", numArr[2][3]);    // 132: 세로 인덱스 2, 가로 인덱스 2인 요소 출력
                          // ↑ 가로 인덱스

    return 0;
}

실행 결과

11
77
99
132

세로 크기 3, 가로 크기 4인 int형 2차원 배열을 선언하고, 값을 초기화 했습니다.

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

2차원 배열도 인덱스는 0부터 시작합니다. 따라서 배열 numArr의 가로 첫 번째, 세로 첫 번째 요소는 numArr[0][0]이 됩니다.

그림 34‑2 인덱스로 2차원 배열의 요소에 접근
참고 | 배열의 초기화

다음과 같이 2차원 배열을 초기화 할 때 가로 요소를 중괄호로 묶지 않아도 컴파일이 잘됩니다. 물론 결과도 가로 요소를 중괄호로 묶었을 때와 같습니다. 하지만 이렇게 작성하면 이해하기가 어려워서 잘 쓰이지 않는 방법입니다.

int numArr[3][4] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132 };