플로렌스라는 개발자

C언어 다차원 배열

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

목차

    다차원 배열

    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}
        }
    }

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

    댓글

    0