본문 바로가기
쿤즈 Dev/C

[C언어] 다차원 배열 (Multi-Demetional Arrays) 사용 방법

by :)Koon 2020. 10. 30.

지난 포스팅에서 배열이 무엇이고 배열을 선언하고 사용하는 방법에 대해서 알아보았습니다. 배열은 같은 자료형(Type)의 값들을 하나의 변수에 저장해서 사용하는 방법입니다. 이러한 배열은 프로그래머가 크기를 정해주고 크기에 맞게 접근해서 사용할 수 있었습니다.

 

 

이번 포스팅에서는 1차원 배열이 아닌 2차원 혹은 3차원 배열을 사용하는 방법까지 알아보도록 하겠습니다.


다차원 배열의 선언

다차원 배열을 선언하는 방법은 앞서 알아본 배열의 선언 방법과 동일합니다. 다만 배열의 크기를 정할때 다차원 배열인 만큼 여러개의 크기를 정해주어야 합니다. 만약 2차원 배열이라면 행과 열의 크기를, 3차원 배열이라면 행, 열과 추가로 면의 크기를 정해주어야 합니다. 2차원 배열을 예로 설명해 드리겠습니다.

 

2차원 배열을 선언하기 위해서는 아래와 같이 사용합니다.

int numbers [ arraySize1 ] [ arraySize2 ] ;

앞선 배열의 선언과 같이 자료형을 사용합니다. 예제에서는 int 를 사용했지만 float, char, double 과 같이 사용할 수 있습니다. 이렇게 선언된 자료형의 값을 배열 내부에 저장할 수 있습니다.

 

배열의 크기는 2개를 표시합니다. arraySize1은 행(Row)을 뜻하고 arraySize2는 열(Column)을 뜻합니다. 만약 2차원 배열의 선언을 int numbers[2][3]; 으로 선언했다면 아래와 같은 형태로 만들어질 것입니다.

이렇게 정의된 배열은 위 그림에서 보는 것과 같은 형태로 구성된다고 생각하면 쉽습니다. 따라서 접근할 때에는 numbers[0][0], numbers[0][2] 와 같이 접근해 주시면 됩니다.

 

마찬가지로 3차원 배열의 경우는 이 배배열의 크기가 1개 더 있다고 생각하시면 됩니다. 예를들어서 3차원 배열 int numbers[2][2][3]; 와 같이 선언했다고 가정하겠습니다. 그럼 아래와 같이 배열이 생성된다고 생각하시면 됩니다.

2개의 면, 각각은 2개의 행과 3개의 열을 가지고 있는 3차원 배열을 선언한 것입니다. 


다차원 배열의 초기화

다차원 배열의 초기화 방법은 역시 중괄호를 통해서 초기화를 해줍니다. 다만 행과 열로 되어 있기 때문에 다시 중괄호로 묶어서 값을 설정해 줍니다.

int numbers[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } } ;

1차원 배열이라면 {1, 2, 3} 으로 선언해 줄수 있지만 2차원 배열은 다시 밖에 중괄호로 묶어주어야 합니다. 그렇다면 3차원 배열은 어떻게 할까요? 다음은 3차원 배열입니다.

int numbers[2][2][3] = { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } } ;

가장 마지막 중괄호가 3개의 열을 뜻하고, 그 다음 중괄호가 2개의 행을 뜻합니다. 마지막으로 가장 밖에 있는 중괄호가 면의 개수를 뜻하는 것입니다.


다차원 배열의 접근

다차원 배열의 접근도 1차원 배열의 접근 방법과 동일합니다. 배열에 접근할 때에는 배열 번호를 붙여서 값을 저장하거나 가져올 수 있습니다.

nubmers[0][1] = 3;
numbers[0][1][2] = 6;

나머지는 소스코드를 통해서 알아보도록 하겠습니다.


소스코드1 multi_arrays_1.c

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int numbers[2][3] = {{0, 1, 2}, {3, 4, 5}};
    int i, j;

    for(i=0; i<2; ++i)
    {
        for(j=0; j<3; ++j)
        {
            printf("numbers[%d][%d] = %d\n", i, j, numbers[i][j]);
        }
    }
    
    return 0;
}

결과1

numbers[0][0] = 0
numbers[0][1] = 1
numbers[0][2] = 2
numbers[1][0] = 3
numbers[1][1] = 4
numbers[1][2] = 5

윌에서 알아본 선언 방법 대로 2차원 배열을 선언합니다. 그리고 선언과 동시에 초기화까지 함께 했습니다. 초기화 값은 순서대로 0, 1, 2, 3, 4, 5, 6 입니다.

 

제대로 초기화 되었는지 확인하기 위해서 반복문 for 와 표준출력함수 printf() 를 사용해서 값을 출력하도록 프로그래밍했습니다. 이 때 주의할점은 반복문을 중첩해서 사용했다는 점과 반복 횟수가 배열의 크기와 동일하다는 점입니다.


이번 포스팅에서는 다차원 배열에 대해서 알아보았습니다. 다차원 배열은 1차원 배열과 선언 및 정의, 사용 방법이 모두 동일합니다. 다만 배열의 크기가 2개 혹은 3개가 되기 때문에 그 점만 유의해서 선언하고 사용하시면 됩니다.

 

다차원 배열은 자료구조를 할 때, 스택과 함께 미로 찾기나 게임에서 맵을 만들때 많이 사용하는 방법입니다. 이 역시 사용하다보면 익숙해지실거에요.

댓글