다차원 배열

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

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

'프로그래밍 > C' 카테고리의 다른 글

C언어 함수 포인터와 void 포인터  (0) 2019.04.18
포인터의 포인터(이중 포인터)에 대한 이해  (0) 2019.04.18
C언어 다차원 배열  (0) 2019.04.18
상수 형태의 문자열을 가리키는 포인터  (0) 2019.04.17
포인터 연산  (0) 2019.04.17
C언어 포인터  (0) 2019.04.17

댓글을 달아 주세요