티스토리 뷰

리눅스 C-언어 초급과정

10. 배열

다유데브 2022. 11. 16. 09:41
반응형

1) 목표

  • 배열 이해하기
  • 배열 초기화 이해하기

2) 설명

// 배열 선언하는 방법
// type 변수명[크기];
char cbuf[5];
int nbuf[5];

// 배열 선언과 동시에 값을 할당하는 방법
char cbuf[5] = {'h','e','l','l','o'};
int nbuf[5] = {1,2,3,4,5};

// 배열의 값을 참조하는 방법
cbuf[2]
nbuf[3]

    ▶ 배열을 선언하는 방법은
         타입 변수명[크기];   -> [ ] 로 선언합니다. 변수명에 []가 있으면 배열로 보시면 됩니다.
         변수가 선언되면 메모리에 할당된다고 말씀드렸는데, 배열도 위와 같이 cbuf[5]로 선언되면

         char 타입 크기로 5개의 메모리가 할당됩니다. char 타입의 크기는 sizeof()로 구할수 있다고 말씀드렸지요.
         char 크기는 1바이트 그래서 5바이트의 크기가 할당됩니다.

         메모리 -> 1바이트 크기의  [0][1][2][3][4] 가 할당 됩니다. cbuf[5]는 char 값을 5개 담을 수 있습니다. 

         int nbuf[5]으로 선언되면 int 타입의 크기로 5개가 할당됩니다. int 크기는 4바이트입니다.

         메모리 -> 4바이트 크기의 [0][1][2][3][4] 가 할당 됩니다. nbuf[5]는 int 값을 5개 담을 수 있습니다.

    ▶ 초기화 하는 방법

         - 선언시 초기화

           char cbuf[5] = {'h','e','l','l','o'};
           { 값 } 를 사용해서  초기화 하실 수 있습니다.
           [0][1][2][3][4]

            h  e  l   l    o   ==> 메모리에 값이 들어갑니다.

         - 배열의 인덱스로 값을 할당

           cbuf[5]는 char 값을 5개 담을수 있는데 배열에 값을 할당하는 방법은 인덱스를 사용해서 할당 하실 수 있습니다.
           cbuf[0] = 'h';

           cbuf[1] = 'e';

           cbuf[2] = 'l';

           cbuf[3] = 'l';

           cbuf[4] = 'o';

           이렇게 배열의 순번(인덱스)을 사용해서 값을 할당 하실 수 있습니다.           

         ※ c언어에서 배열의 인덱스는 0 부터 시작합니다. 중요하니 외워두세요!


    ▶ 배열의 값을 참조하는 방법

        인덱스를 사용해서 하시면 됩니다.

        cbuf[4];  // 'o'값을 참조하실 수 있습니다. 
        

3-1) 예제프로그램

    ▶ vi arr.c

#include <stdio.h>

// 배열을 선언과 동시에 값을 할당하는 방법
int main() {
    char cbuf[5] = {'h', 'e', 'l', 'l', 'o'};
    int nbuf[5] = {1, 2, 3, 4, 5};
    int i;

    // 배열의 값을 출력해 봅니다.
    printf("----- char타입의 cbuf 출력 -----\n");
    for (i = 0; i < 5; i++) {
        printf("cbuf[%d]=%c\n", i, cbuf[i]);
    }

    printf("----- int타입의 nbuf 출력 -----\n");
    for (i = 0; i < 5; i++) {
        printf("nbuf[%d]=%d\n", i, nbuf[i]);
    }

    return 0;
}

    ▶ 컴파일/실행

~/c-lecture (master ✘)✭ ᐅ gcc -o arr arr.c
~/c-lecture (master ✘)✭ ᐅ ./arr
----- char타입의 cbuf 출력 -----
cbuf[0]=h
cbuf[1]=e
cbuf[2]=l
cbuf[3]=l
cbuf[4]=o
----- int타입의 nbuf 출력 -----
nbuf[0]=1
nbuf[1]=2
nbuf[2]=3
nbuf[3]=4
nbuf[4]=5
~/c-lecture (master ✘)✭ ᐅ

    ▶ 분석

  • char cbuf[5] = {'h', 'e', 'l', 'l', 'o'};
    int nbuf[5] = {1, 2, 3, 4, 5};
    선언과 동시에 값을 할당
...
    // 배열의 값을 출력해 봅니다.
    printf("----- char타입의 cbuf 출력 -----\n");
    for (i = 0; i < 5; i++) {
        printf("cbuf[%d]=%c\n", i, cbuf[i]);
    }

    printf("----- int타입의 nbuf 출력 -----\n");
    for (i = 0; i < 5; i++) {
        printf("nbuf[%d]=%d\n", i, nbuf[i]);
    }
  • for문을 사용해서 출력합니다. 배열의 크기가 5이므로 for반복문을 사용합니다.
    for 문에서 i값을 0 부터 5보다 작을때 까지 동작합니다.
    즉, 0 ~ 4까지 동작합니다. 위에서 배열은 0 부터 시작한다고 설명을 드렸지요.
    그래서 for문 안의 printf()문 cbuf[i]는 cbuf[0], cbuf[1], cbuf[2], cbuf[3], cbuf[4]로 정확히 치환됩니다. 
    printf문에서 char타입을 출력하는 서식 %c 를 사용해서 cbuf[5]를 출력합니다.
    printf문 cbuf[%d] 는 출력시 배열의 인덱스, 여기서는 i값이 되겠죠. cbuf의 인덱스를 출력합니다. 
    아래 int nbuf[5]도 같은 방식으로 동작합니다.

3-2) 배열크기 생략

    ▶ vi arr2.c

#include <stdio.h>

// 배열을 선언과 동시에 값을 할당하는 방법
int main() {
    char cbuf[] = {'h', 'e', 'l', 'l', 'o'};
    int nbuf[] = {1, 2, 3, 4, 5};
    int i;

    // 배열의 값을 출력해 봅니다.
    printf("----- char타입의 cbuf 출력 -----\n");
    for (i = 0; i < 5; i++) {
        printf("cbuf[%d]=%c\n", i, cbuf[i]);
    }

    printf("----- int타입의 nbuf 출력 -----\n");
    for (i = 0; i < 5; i++) {
        printf("nbuf[%d]=%d\n", i, nbuf[i]);
    }

    return 0;
}

    ▶ 컴파일/실행

~/c-lecture (master ✘)✭ ᐅ gcc -o arr2 arr2.c
~/c-lecture (master ✘)✭ ᐅ ./arr2
----- char타입의 cbuf 출력 -----
cbuf[0]=h
cbuf[1]=e
cbuf[2]=l
cbuf[3]=l
cbuf[4]=o
----- int타입의 nbuf 출력 -----
nbuf[0]=1
nbuf[1]=2
nbuf[2]=3
nbuf[3]=4
nbuf[4]=5
~/c-lecture (master ✘)✭ ᐅ

    ▶ 분석

  • 배열을 선언과 동시에 값을 할당하는 경우 배열의 크기를 생략하실 수 있습니다.
    char cbuf[] = {'h', 'e', 'l', 'l', 'o'}; 
    ※ 초기값을 할당 안하는 배열의 경우 크기를 생략하실 수 없습니다.
        char cbuf[];
        이런 경우는 컴파일시 오류가 발생합니다.

3-3) 값을 할당하는 예제프로그램

    ▶ vi arr3.c

#include <stdio.h>

int main() {
    char cbuf[5];
    int nbuf[5];
    int i;

    // 배열의 값을 할당
    cbuf[0] = 'h';
    cbuf[1] = 'e';
    cbuf[2] = 'l';
    cbuf[3] = 'l';
    cbuf[4] = 'o';

    nbuf[0] = 1;
    nbuf[1] = 2;
    nbuf[2] = 3;
    nbuf[3] = 4;
    nbuf[4] = 5;

    // 배열의 값을 출력해 봅니다.
    printf("----- char타입의 cbuf 출력 -----\n");
    for (i = 0; i < 5; i++) {
        printf("cbuf[%d]=%c\n", i, cbuf[i]);
    }

    printf("----- int타입의 nbuf 출력 -----\n");
    for (i = 0; i < 5; i++) {
        printf("nbuf[%d]=%d\n", i, nbuf[i]);
    }

    return 0;
}

    ▶ 컴파일/실행

~/c-lecture (master ✘)✭ ᐅ gcc -o arr3 arr3.c
~/c-lecture (master ✘)✭ ᐅ ./arr3
----- char타입의 cbuf 출력 -----
cbuf[0]=h
cbuf[1]=e
cbuf[2]=l
cbuf[3]=l
cbuf[4]=o
----- int타입의 nbuf 출력 -----
nbuf[0]=1
nbuf[1]=2
nbuf[2]=3
nbuf[3]=4
nbuf[4]=5
~/c-lecture (master ✘)✭ ᐅ

    ▶ 분석

  • 배열의 값을 인덱스를 사용해서 할당하는 예제입니다.
    실행해 보면 위의 예제와 동일합니다.

 

 

반응형

'리눅스 C-언어 초급과정' 카테고리의 다른 글

12. 문자열(string)  (1) 2022.11.16
11. 다차원 배열  (0) 2022.11.16
9. do~while문  (0) 2022.11.15
8. while문  (0) 2022.11.15
7. for문  (0) 2022.11.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함