다차원 배열
- 다차원 배열
2차원 이상의 배열을 의미한다. 논리적으로 1차원 배열을 1차원의 형태(선), 2차원 배열은 2차원의 형태(평면), 3차원 배열은 3차원의 형태(직육면체)를 띤다. 4차원 및 그 이상의 차원은 문법적으로 허용하고 있으나, 불필요하고, 이해하기도 어려운 형태의 배열이다.
아래와 같이 1차원, 2차원, 3차원 배열을 논리적으로 표현한다.
<길이가 10인 1차원 배열>
<행과 열의 길이가 각각 5인 2차원 배열>
<행과 열 그리고 높이의 길이가 각각 3인 3차원 배열>
- 2차원 배열
2차원 배열을 다음과 같이 선언한다.
Type 배열이름[행(세로길이)][열(가로길이)];
아래는 선언의 예와 구조를 나타냄.
<2행 4열인 2차원 정수형 배열 arr1>
<3행 5열인 2차원 정수형 배열 arr2>
이렇게 선언한 변수는 인덱스를 활용한 접근을 다음과 같이 접근한다.
배열 이름[원하는 행 인덱스][원하는 열 인덱스] = 값;
배열 이름[원하는 행 인덱스][원하는 열 인덱스]
그 이전에 인덱스에 대한 분포는 다음과 같이 이루어져 있다.
원하는 인덱스에 값을 대입 및 원하는 인덱스의 값을 출력하는 예이다.
2차원 배열의 메모리 상의 할당 형태
2차원 배열도 사실은 메모리 상에 1차원 배열의 형태로 존재한다. 메모리의 물리 구조적으로 1차원의 형태로 이루어져 있기 때문이다. 다음의 예는 2차원 배열의 메모리 상 할당된 형태를 보인다.
2차원 배열의 초기화
일반적으로 초기화 할 경우, 행 단위로 중괄호로 구분하고 각 행에 대해서 열 단위로 값을 채워 초기화 해준다. 단, 열에 대해서 초기화 값을 생략할 경우 0으로 자동 초기화가 이루어진다. 다음은 관련 예이다.
위와 같이 행과 열을 맞추어 초기화하는 것이 보통이지만,
위와 같이 열에 대해서 초기화 값을 생략할 경우 0으로 자동 초기화가 이루어진다. 두 예제는 같은 값으로 초기화가 이루어진다.
다음과 같이 1차원 배열 초기화 형태로 초기화가 이루어질 수 있다. 왜냐하면 2차원 배열은 사실 1차원 배열 구조로 메모리 상에 적재되기 때문이다. 중요한 것은 초기화될 때 명시된 초기화 값들은 메모리 상의 인덱스 순서대로 값이 대입된다.
배열의 크기를 알려주지 않고 초기화 값들을 통해서 자동으로 계산하여 초기화 하는 방법 또한 존재한다.
단, 위와 같이 행과 열 모두 생략할 경우 2x3인지, 3x2인지, 0을 생략한 경우까지 봐야 하는지 사람의 입장에서도 알 수 없기 때문에 행과 열 인덱스를 모두 생략할 수 없다. 2차원 배열에서 인덱스를 생략할 때는 행만 생략 가능하고, 열은 꼭 제시해야만 한다.
위 예제의 경우에는 행만 생략한 경우로 제시한 열을 토대로 행을 자동 계산하여 2x3 형태의 2차원 배열을 생성한다.
- 3차원 배열
3차원 배열은 여러 개의 2차원 배열이 모여 있는 형태로 이해 가능하며, 3차원은 논리적인 구조 상에서 3차원이고, 물리적인 메모리 상에서는 1차원의 형태로 할당되어 인덱스가 구성된다.
'컴퓨터 언어 정리 > C 언어' 카테고리의 다른 글
13 다차원배열 및 포인터의 관계 (0) | 2020.09.21 |
---|---|
12 포인터의 포인터 (0) | 2020.09.15 |
10 포인터와 함수 (0) | 2020.09.13 |
09 포인터와 배열 (0) | 2020.09.12 |
08 포인터 기본 (0) | 2020.09.11 |