juuuding
CH 16 다차원 배열 본문
1. 다차원 배열의 이해와 활용
1. 다차원 배열을 대표하는 2차원 배열의 선언
int arr1[3][4]; -> 세로3, 가로 4인 int형 2차원 배열
int arr2[2][6]; -> 세로2, 가로 6인 int형 2차원 배열
<int arr1[3][4]의 형태>
[0][0] | [0][1] | [0][2] | [0][3] |
[1][0] | [1][1] | [1][2] | [1][3] |
[2][0] | [2][1] | [2][2] | [2][3] |
TYPE arr [세로길이][가로길이];
sizeof(arr1)의 결과 : 3*4*4 = 16
2. 2차원 배열의 메모리상 할당의 형태
우리가 사용하는 컴퓨터 메모리는 2차원 구조가 아니다. 이는 메모리 주소 값을 통해 알 수 있다. 우리가 사용하는 메모리의 주소 값은 다음과 같이 1차원적 구조이다.
" 0x1001번지, 0x1002번지, 0x1003번지, 0x1004번지 .... "
따라서 2차원 배열도 메모리상에는 1차원의 형태로 존재한다.
3. 2차원 배열 선언과 동시에 초기화하기
행 단위로 초기화할 값들을 별도의 중괄호로 명시해야한다. 일부 요소에 대해서는 초기화를 생략할 수 있는데, 비게 되는 공간은 0으로 초기화된다.
<2차원 배열 초기화1>
int arr[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
<2차원 배열 초기화2>
int arr[3][3] = {
{1},
{4,5},
{7,8,9}
};
1 | 0 | 0 |
4 | 5 | 0 |
7 | 8 | 9 |
<2차원 배열의 초기화3>
int arr[3][3] = {
1,2,3
4,5,6
7
};
int arr[3][3] = {1,2,3,4,5,6,7};
int arr[3][3] = {1,2,3,4,5,6,7,0,0};
//위 세 결과는 모두 같다
위와 같이 리스트를 나열하면 1행의 1열부터해서 순서대로 초기화되는데, 부족한 영역은 0으로 초기화된다.
1 | 2 | 3 |
4 | 5 | 6 |
7 | 0 | 0 |
4. 배열의 크기를 알려주지 않고 초기화하기
1차원 배열 선언 시, 초기화 리스트가 존재한다면 배열의 길이를 명시하지 않아도 되었다. 2차원 배열도 마찬가지이다. 하지만 2차원 배열에서는 가로, 세로 길이 중 하나를 명시해야하는 제약 조건이 있다.
2. 3차원 배열
1. 3차원 배열의 논리적 구조
3차원 배열은 2차원 배열에서 높이의 개념이 추가되었다고 생각하면 된다.
int arr1[3][3][4]; → 높이3, 세로3, 가로4인 int형 3차원 배열
sizeof(arr1) : 3*3*4*4 = 144
3차원 배열의 가장 합리적인 표현은 "여러 개의 2차원 배열이 모여있는 형태"이다. 따라서 위의 arr1은 세로와 가로의 길이가 각각 3과 4인 int형 배열 3개가 겹쳐 있는 것으로 이해하는 것이 좋다.
'C언어 > 윤성우의 열혈 C' 카테고리의 다른 글
CH 18 다차원 배열과 포인터의 관계 (0) | 2023.03.17 |
---|---|
CH 17 포인터의 포인터 (0) | 2023.03.17 |
CH 15 도전! 프로그래밍 2 (0) | 2023.03.16 |
CH 14 포인터와 함수에 대한 이해 (0) | 2023.03.15 |
CH 13 포인터와 배열 함께 이해하기 (0) | 2023.03.15 |