친절코딩

52. 다차원 배열 본문

C언어 배우기/C언어 배우기(51~100)

52. 다차원 배열

웹도날드 2018.12.11 01:02


배열은 일직선 상의 메모리에 할당되지만 개념적으로 2차원 또는 그 이상의 모양을 가지는 배열을 선언할 수 있습니다. 2차원 이상의 배열을 다차원 배열이라고 부르며 그 사용법은 다음과 같습니다.


1
자료형 배열이름[요소 개수][요소 개수] . . .
cs


만약 2차원 배열을 쓰고 싶다면 요소의 개수를 두 번, 3차원 배열을 쓰고 싶다면 요소의 개수를 세 번 적으면 됩니다.


1
2
3
4
5
// 2차원 배열의 예
int Array1[3][5];
 
// 3차원 배열의 예
int Array2[2][3][10];
cs


2차원 배열을 예로 들어 설명하겠습니다. 단순 1차원 배열(대괄호를 하나만 사용하는 배열)에서는 배열을 선언하면 요소의 개수가 인덱스 대로 설정됩니다.


1
2
// 이전에 배웠던 기본 배열입니다.
int Array[10--> 요소의 개수 10
cs


하지만 2차원 배열을 생성하면 요소의 개수는 앞 인덱스(3)와 뒤 인덱스(5)를 곱한 개수(15)로 설정되게 됩니다. 이는 마치 3행 5열을 가진 테이블을 연상시킵니다. 이 15개의 공간에 데이터를 저장할 수 있는 것입니다.



물론 실제로 메모리상에 저런 모양의 공간이 할당되는 것은 아닙니다. 그러나 위 방식으로 이차원배열을 이해하는 것이 편리합니다.


위에서 생성한 배열은 앞 [0~2]인덱스와 뒤 [0~5]인덱스를 가집니다. 따라서 각 요소에 접근할 수 있는 인덱스는 다음과 같습니다.



다차원 배열은 이후에 #define이나 enum등과 결합하여 데이터를 정렬하는데 편리하게 사용됩니다. 아직 이것들에 대해 배우지 않았기 때문에 단순한 2차원 배열 예제를 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
 
int main()
{
    // 2행 3열의 2차원 배열을 선언합니다.
    char Alphabet[2][3];
 
    // 1행에는 대문자가 들어갑니다.
    Alphabet[0][0= 'A';
    Alphabet[0][1= 'B';
    Alphabet[0][2= 'C';
 
    // 2행에는 소문자가 들어갑니다.
    Alphabet[1][0= 'x';
    Alphabet[1][1= 'y';
    Alphabet[1][2= 'z';
 
    // 배열의 각 요소를 순회하며 출력합니다.
    for (int i = 0; i < 2++i)
    {
        printf("---%d행---\n", i + 1);
 
        for (int j = 0; j < 3++j)
        {
            printf("%c\n", Alphabet[i][j]);
        }
    }
 
    return 0;
}
 
 
출력 결과////////////////////////////////
 
---1행---
A
B
C
---2행---
x
y
z
cs


다차원 배열도 중괄호를 겹쳐 사용함으로써 초기화할 수 있습니다. 다음 코드는 위 코드의 변수 대입 부분을 초기화로 바꾼 것입니다.


1
2
3
4
5
6
char Alphabet[2][3= { { 'A''B''C' }, { 'x''y''z' } };
 
or
 
// 앞에 행 부분 인덱스를 생략할 수 있습니다.
char Alphabet[][3= { { 'A''B''C' }, { 'x''y''z' } };
cs


이것으로 2차원 배열에 대한 설명을 마치겠습니다. 3차원 배열부터는 잘 사용되지 않기 때문에 설명을 생략하겠습니다.

'C언어 배우기 > C언어 배우기(51~100)' 카테고리의 다른 글

55. 문자열 입력  (0) 2018.12.17
54. 문자열 배열의 초기화  (0) 2018.12.17
53. 배열과 문자열  (0) 2018.12.14
52. 다차원 배열  (0) 2018.12.11
51. 배열의 초기화  (0) 2018.12.06
0 Comments
댓글쓰기 폼