본문 바로가기

프로그래밍/C언어

[C언어] 배열(3)에 대해 알아보자.

안녕하세요 ! 초보개발자 입니다. 

이 블로그는 개인 공부 정리용 블로그 입니다. 

혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.

그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.

그럼 시작하도록 하겠습니다.





오늘은 배열의 세번째 시간입니다. 전 시간에 말씀드린 것과 같이  2차원배열에 대해서 알아보겠습니다.


2차원배열


1)2차원 배열의 선언


2차원 배열을 선언하는 방법은 1차원배열을 선언할 때 [] 를 더 붙여주면 됩니다. ex) int num[5][3]; 첫번 째 괄호는 행의 길이를 뜻하고 두번째 괄호는 열을 뜻합니다. 다음과 같이 저장공간이 마련 될 것입니다.




위와 같은 배열을 선언 하면 num[0][0] 부터 num[4][2]까지 15개의 int형 공간이 마련 됩니다. 

 

2차원 배열을 초기화 하는 방법은 다음과 같이 초기화 할 수 있습니다.

int num[5][3] = {

{1,2,3,4,5},

{6,7,8,9,10},

{11,12,13,14,15}

};


예제를 통하여 알아 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
 
int main(void) {
 
    int num[4][3];
 
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 3; j++) {
            num[i][j] = i + j;
        }
    }
 
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d", num[i][j]);
        }
        printf("\n");
    }
 
    
    return 0;
}
 
 
cs


위의 소스를 실행하면 다음과 같이 출력 됩니다.



for 문에 의해 int 형 배열 num 에 값을 저장 후 출력하는 것입니다. 2중 for문은 배웠으니 아시죠 ? 실행결과를 천천히 따라서 보시면 될 거 같습니다.


1차원 배열의 크기를 구할 때 어떻게 구하였는지 기억하시나요 ??? 네! sizeof(배열이름)으로 구하였습니다.  2차원 배열의 크기도 마찬가지 입니다. sizeof(배열이름) 을 하면 2차원배열의 크기를 구할 수 있습니다. 


그렇다면 위에서 선언한 2차원 배열 num의 행의 길이와 열의 길이는 어떻게 구할 까요 ?  다음과 같이 구할 수 있습니다.


   행의 길이 = 배열의 크기 / 행의 크기

열의 길이 = 행의 크기 / 열의 크기



배열의 크기는 구했는데 행의 크기나 열의 크기는 어떻게 구할까요 ? 행의크기는 sizeof(행이름)으로 구할 수 있습니다. 그렇다면 num[4][3] 의 행의 크기는 sizeof(num[0]) 이겠죠? 열의 크기는 sizeof(num[0][0]) 입니다. 


예제를 통하여 알아보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
 
int main(void) {
 
    int num[4][3= { 0 }; // 배열의 모든 요소를 0으로 저장
 
    printf("배열의 크기는 %d 입니다.\n"sizeof(num));
    printf("행의 크기는 %d 입니다.\n"sizeof(num[0]));
    printf("열의 크기는 %d 입니다.\n"sizeof(num[0][0]));
    printf("행의 길이는 %d 입니다.\n"sizeof(num) / sizeof(num[0]));
    printf("열의 길이는 %d 입니다.\n"sizeof(num[0]) / sizeof(num[0][0]));
 
    
 
    
    return 0;
}
 
 
cs


실행 결과를 보면 예상했던 대로 나오는 것을 알 수 있습니다.


2)문자열 배열


다음은 문자열 배열에 대해서 알아보겠습니다. 1차원 배열 하나에 문자열 하나를 저장 할 수 있으므로 여러개의 문자열을 하나의 묶음으로 저장하기 위해서는 2차원 char 배열이 필요합니다.


선언하는 방법은 다음과 같습니다.


char str[3][4] = {

"abc",

"def",

"ghi"

    }

글자는 abc,def,ghi 처럼 3글자인데 char str[3][3] 으로 해주는게 아닐까 ? 1차원배열에서 배운것처럼 문자열은 \0(null 문자) 가 필요로 합니다. 그래서 char[3][4]로 선언해 주었습니다. 조심해 주셔야 합니다.


소스 코드를 통해서 보도록 하겠습니다.


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
#include<stdio.h>
 
int main(void) {
 
    char str[3][4= {
        "abc",
        "def",
        "ghi"
    };
 
    for (int i = 0; i < 3; i++) {
        printf("str[%d] = %s\n",i,str[i]);
    }
    printf("\n");
 
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("str[%d][%d] = %c\n", i, j, str[i][j]);
        }
    }
    
    return 0;
}
 
 
cs



위 소스의 실행 결과는 다음과 같습니다.



예상대로 나왔나요 ? str[0][3] 과 str[1][3], str[2][3] 은 null 문자가 입력된 것을 확인 하실 수 있습니다.


이상으로 2차원 배열에 대해서 알아 보았습니다.


다음시간에는 이때까지 배운 내용을 토대로 문제를 풀어보도록 하겠습니다.


수고하셨습니다.