플로렌스라는 개발자

프로그래밍/C 2019.04.18 댓글 0 Plorence

C언어 다차원 배열

다차원 배열

C언어에서 1차원을 배우다 보면 다른 차원도 있다고 생각하실 겁니다.
크게 3차원까지 있는데 3차원도 잘 안 씁니다.
더 나아가 배열의 크기만 안 넘는다면 4차원 이상도 가능합니다.

 

2차원 배열

2차원 배열은 그대로 면 형태를 이루고 있습니다.

 

2차원 배열의 선언 방식

TYPE 배열이름[세로길이][가로길이];

이때 배열의 사이즈는 세로길이*가로길이가 되겠습니다.

 

2차원 배열을 선언과 동시에 초기화 하는 방법

초기화 리스트 안에는 행 단위로 초기화할 값들을 별도의 중괄호로 명시합니다.

int arr[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};

아래는 결과입니다.

1|2|3
4|5|6
7|8|9

채워지지 않은 빈공간(초기화를 하지 않은 배열 원소)은 0으로 초기화됩니다.
별도의 중괄호를 사용하지 않으면 왼쪽 상단부터 시작해서 오른쪽 하단으로 순서대로 초기화합니다.

 

배열의 크기를 알려주지 않고 초기화하기

int arr[][]  (두 개가 모두 비면 컴파일러가 채워 넣을 숫자를 결정하지 못합니다.)
세로 길이만 생략 할 수 있도록 약속되어 있습니다.

int arr[][4] = {1,2,3,4,5,6,7,8};

세로 길이 2, 가로길이 4인 2차원 배열이 선언됩니다.

배열의 이름

단순하게 생각하면 1차원 배열이 '세로 길이'만큼 있는 배열입니다.

#include <stdio.h>
int main(void) {
       int arr[3][3] = {
              {1,2,3},
              {4,5,6},
              {7,8,9}
       };
       printf("%p %p", arr[1], &arr[1][0]);
}

그래서 arr[0],arr[1],arr[2]은 각각 배열의 이름에 해당하고 마찬가지로 상수 형태의 포인터입니다.
이때 출력되는 주소값은 서로 같습니다.

3차원 배열

2차원이 면이라면 3차원은 입체 형태입니다.
3차원 배열의 선언 방식:TYPE 배열이름[높이][세로][가로]; (높이 또는 깊이라고 함)
이거 또한 2차원 배열이 '높이'만큼 있는 겁니다.
int arr[3][2][3]은 세로 길이가 2, 가로길이가 3인 배열이 3개가 있다는 것입니다.

int arr[3][2][3] = {
    {
        {1,2,3}
        {1,2,3}
    }
    {
        {1,2,3}
        {1,2,3}
    }
    {
        {1,2,3}
        {1,2,3}
    }
}

이런 식으로 초기화가 가능합니다.