ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C Language] 29. 1차원 배열 - C 언어
    CSE/C Language 2015. 7. 16. 17:47

    1. 1차원 배열의 정의

     1차원 배열은 다음과 같은 형식으로 정의한다.




        배열요소형 배열명[첨자];



    1
    2
    3
    4
     int dim[1024];
     char name[512];
     float same[10];
     
    cs



     배열요소형은 int, char, char *, float 등의 배열요소에 대한 형을 뜻하며, 배열명은 배열을 대표하는 이름이다. 


     앞에서 한 학급의 총점을 구하기 위해서 student를 사용했는데, 배열명을 사용할 때 배열이 어떠한 성격을 가지는지 파악할 수 있도록 신경써서 배열명을 짓도록 하자.


     배열의 크기는 배열의 전체 크기를 지정한다. 배열의 크기는 2의 배수로 지정하는 것이 시스템에서 동작할 때 연산을 빨리 진행하고 메모리 단편화(Memory Fragmentation)를 막을 수 있다. 그래서 시스템 프로그램을 자세히 보면 100보다 512, 1024라고 되어 있는 경우가 더 많을 것이다.






    2. 1차원 배열의 초기화

     변수와 마찬가지로 배열도 초기화를 해주지 않으면 쓰레기 값 때문에 문제를 발생시킬 소지가 있으므로 초기화에 신경써야 한다.



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    /*
     * array.c
     *
     *  Created on: 2015. 7. 16.
     *      Author: Yeonsu
     */
     
    #include <stdio.h>
     
     
    int main(void) {
     
        int tmpArr[5];
     
        printf("%d %d %d %d %d\n", tmpArr[0], tmpArr[1], tmpArr[2], tmpArr[3], tmpArr[4]);
     
        return 0;
    }
     
    cs











     다음으로 배열을 초기화하는 예제를 살펴보자.



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    /*
     * array.c
     *
     *  Created on: 2015. 7. 16.
     *      Author: Yeonsu
     */
     
    #include <stdio.h>
     
     
    int main(void) {
     
        int i;
        int tmpArr[5= {0};
     
        for (i = 0; i < 5; i++) {
            printf("%d ", tmpArr[i]);
        }
     
        return 0;
    }
     
    cs












    3. 주의사항(1차원 문자배열 초기화)

     다음 예를 통해 주의해야 할 사항을 알아보자.


    1
     char moon[4= {'m''o''o''n'};
    cs



     1차원 문자배열을 초기화할 때 가장 중요한 것이 바로 '널(NULL)'이다. 널을 제대로 처리하지 못하면 프로그램이 폭주하는 일이 발생할 수 있다. 위 코드는 문제가 없어보이지만 사실 널 처리를 제대로 하지 못한 것이다. 


     C 언어에서 문자열 끝에는 항상 널 문자로 끝나도록 되어 있으며 예외는 없다. 문자열의 끝에 널 문자가 없다면 잘못된 것이다.


     위의 코드를 수정하여 아래와 같이 사용해야 한다.


    1
     char moon[5= {'m''o''o''n''\0'};
    cs




     널 문제에 대해 예제를 통해 보자.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /*
     * array.c
     *
     *  Created on: 2015. 7. 16.
     *      Author: Yeonsu
     */
     
    #include <stdio.h>
     
     
    int main(void) {
     
        char moon[4= "moon";
     
        puts(moon);
     
        return 0;
    }
     
    cs








     널 문자에 부재로 인해서 옆의 메모리 공간의 쓰레기 값이 출력되었다.







     위 예제를 통해서 해결책은 아래와 같다. 


    1
    2
    3
     
     char moon[5= "moon";
     char moon[] = "moon";
    cs



     



    4. 1차원 배열 예제

     배열 내부 요소를 정렬하는 예제를 살펴보자.



    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
    /*
     * array.c
     *
     *  Created on: 2015. 7. 16.
     *      Author: Yeonsu
     */
     
    #include <stdio.h>
     
     
    int main(void) {
     
        int i, j;
        int tmp;
        int total;
        int dim[10= {56786445884035468023};
     
        for (total = 0; total < 10; total++)
            printf("%d ", dim[total]);
     
        putchar('\n');
     
        for (i = 0; i < 10; i++) {
            for (j = i + 1; j < 10; j++)
                if (dim[i] > dim[j]) {
                    tmp = dim[i];
                    dim[i] = dim[j];
                    dim[j] = tmp;
                }
     
            for (total = 0; total < 10; total++)
                printf("%d ", dim[total]);
     
            putchar('\n');
        }
     
        return 0;
    }
     
    cs






     다음은 소문자 갯수를 구하는 예제를 통해 배열을 알아보자.




     

    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
     
    /*
     * array.c
     *
     *  Created on: 2015. 7. 16.
     *      Author: Yeonsu
     */
     
    #include <stdio.h>
     
     
    int main(void) {
     
        int i = 0;
        char string[51];
        int count[26= {0};
     
        puts("영 소문자를 입력하세요( < 50). ");
        fgets(string, sizeof(string), stdin);
     
        while(string[i])
            count[string[i++- 'a']++;
     
        for (i = 0; i < 26; i++)
            printf("[%c] %d\n"'a' + i, count[i]);
     
        return 0;
    }
     
    cs













    댓글

Designed by Tistory.