-
[C Language] 29. 1차원 배열 - C 언어CSE/C Language 2015. 7. 16. 17:47
1. 1차원 배열의 정의
1차원 배열은 다음과 같은 형식으로 정의한다.
배열요소형 배열명[첨자];
1234int dim[1024];char name[512];float same[10];cs 배열요소형은 int, char, char *, float 등의 배열요소에 대한 형을 뜻하며, 배열명은 배열을 대표하는 이름이다.
앞에서 한 학급의 총점을 구하기 위해서 student를 사용했는데, 배열명을 사용할 때 배열이 어떠한 성격을 가지는지 파악할 수 있도록 신경써서 배열명을 짓도록 하자.
배열의 크기는 배열의 전체 크기를 지정한다. 배열의 크기는 2의 배수로 지정하는 것이 시스템에서 동작할 때 연산을 빨리 진행하고 메모리 단편화(Memory Fragmentation)를 막을 수 있다. 그래서 시스템 프로그램을 자세히 보면 100보다 512, 1024라고 되어 있는 경우가 더 많을 것이다.
2. 1차원 배열의 초기화
변수와 마찬가지로 배열도 초기화를 해주지 않으면 쓰레기 값 때문에 문제를 발생시킬 소지가 있으므로 초기화에 신경써야 한다.
1234567891011121314151617181920/** 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 다음으로 배열을 초기화하는 예제를 살펴보자.
1234567891011121314151617181920212223/** 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차원 문자배열 초기화)
다음 예를 통해 주의해야 할 사항을 알아보자.
1char moon[4] = {'m', 'o', 'o', 'n'};cs 1차원 문자배열을 초기화할 때 가장 중요한 것이 바로 '널(NULL)'이다. 널을 제대로 처리하지 못하면 프로그램이 폭주하는 일이 발생할 수 있다. 위 코드는 문제가 없어보이지만 사실 널 처리를 제대로 하지 못한 것이다.
C 언어에서 문자열 끝에는 항상 널 문자로 끝나도록 되어 있으며 예외는 없다. 문자열의 끝에 널 문자가 없다면 잘못된 것이다.
위의 코드를 수정하여 아래와 같이 사용해야 한다.
1char moon[5] = {'m', 'o', 'o', 'n', '\0'};cs 널 문제에 대해 예제를 통해 보자.
12345678910111213141516171819/** array.c** Created on: 2015. 7. 16.* Author: Yeonsu*/#include <stdio.h>int main(void) {char moon[4] = "moon";puts(moon);return 0;}cs 널 문자에 부재로 인해서 옆의 메모리 공간의 쓰레기 값이 출력되었다.
위 예제를 통해서 해결책은 아래와 같다.
123char moon[5] = "moon";char moon[] = "moon";cs 4. 1차원 배열 예제
배열 내부 요소를 정렬하는 예제를 살펴보자.
123456789101112131415161718192021222324252627282930313233343536373839/** 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] = {56, 78, 64, 45, 88, 40, 35, 46, 80, 23};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 다음은 소문자 갯수를 구하는 예제를 통해 배열을 알아보자.
1234567891011121314151617181920212223242526272829/** 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 'CSE > C Language' 카테고리의 다른 글
[C Language] 31. 지역변수 - C 언어 (0) 2015.07.19 [C Language] 31. 기억부류(Storage Class) 개요 - C 언어 (0) 2015.07.18 [C Language] 30. 2차원 배열 - C 언어 (0) 2015.07.18 [C Language] 28. 배열 개요 - C 언어 (0) 2015.07.16 [C Language] 27. 시간함수 - C 언어 (0) 2015.07.16 [C Language] 26. 함수 - 재귀함수(Recursive) - C 언어 (0) 2015.06.13