다차원 배열

지금까지의 배열은 자료들이 일직선상에 늘어서 있는 1차원적인 개념으로 보았다.

C언어에서는 이 개념을 확장시켜 일반화한 다차원 배열을 지원한다. 2차원 배열에 대해서 살펴보자.

2차원 배열은 1차원 배열의 각 원소가 배열로 구성된 배열의 배열이다.

다음의 예제를 통하여 2차원 배열의 선언과 사용법을 살펴보자

2차원 배열을 초기화하여, 화면에 출력하는 프로그램이다.

#include <stdio.h>

int main ()
{
       int i, j;
       int array[3][4] = {{15,23,45,56},{34,52,76,23},{43,62,91,84}};
       
       
       for (i = 1; i < 3; i++)
       {
           for(j = 0; j < 4; j++)
           {
                printf("%d ",  ARRAY[i][j]);
           }
           printf("\n");
       }
       return 0;
}


mparray01.png

 

설명

int array[3][4];

2차원 배열의 색인은 두 개의 대괄호로 표시한다. 배열 array는 3개의 원소로 구성되어 있고, 각 원소는 4개의 int형 데이터로 구성되어 있다.

2차워 배열은 다음과 같이 볼 수 있다.

a[0][0]

a[0][1]

a[0][2]

a[0][3]

a[1][0]

a[1][1]

a[1][2]

a[1][3]

a[2][0]

a[2][1]

a[2][2]

a[2][3]

{{15,23,45,56},{34,52,76,23},{43,62,91,84}};

2차원 배열의 초기화는 각 차원마다 중괄호로 표시하고, 각 원소는 콤마를 사용해서 구분한다.

다음의 표로 2차원 배열의 여러 가지 표기법을 보자

 

mparray02.png  

 

<배열 ARRAY의 값과 주소의 표시법>

1. 배열의 이름이 배열이 시작하는 메모리의 주소를 나타내는 상수이므로 array 는 이 배열이 시작하는 메모리의 주소를 나타내는 상수이므로 array는 이배열이 시작하는 곳의 주소이다. 또한 이 주소는 배열의 첫 번째 원소의 주소와 같다.

따라서 array == &array[0]가 성립된다.

 

2. array 의 첫 번재 원소 array[0]는 네 개의 정수형 원소 array[0][0], array[0][1], array[0][2], array[0][3]을 가지는 배열이므로 array[0]는 첫 번재 원소를 가리키는 주소이다. 즉 array[0] = &array[0][0]이 된다.

따라서 array == array[0] == &array[0][0] 이 된다.

 

3. 포인터의 번지의 연산에서 1을 더하면 원소의 크기만큼 증가한다. 즉 (array + 1)의 값은 array[1] == 1016이고,  (array[0]+1)은 &array[0][1] == 1004가 된다.

 

4. 배열의 원소를 포인터 표기로 나타내는 방법을 살펴보자. array[0]는 첫 번째 원소 arraay[0][0]의 번지 이므로 *(array[0]) == array[0][0]가 된다. array == &array[0]로 첫 번째 원소의 주소이고 *array == array[0]이다. array[0] == &array[0][0] 이다.

따라서 이런 포인터 표기법을 사용하여 배열의 원소를 접근하면 아래와 같이 된다.

array[2] == *(array + 2)

array[2][3] == *(*(array + 2) + 3)