배열은 일반적인 변수와 비슷한 형태로 선언하고 사용하는데 대괄호[]를 사용하는 점이 다릅니다.
먼저 다음과 같이 배열을 선언합니다.
int num[4];
그러면 num[0], num[1], num[2], num[3]라는 4개의 num이 생성됩니다.
num[0]
num[1]
num[2]
num[3]
이때 1~4가 아니라 0~3으로 생성되는 이유는 C언어에서 자료형이 갖는 범위를 생각해보면 이해할 수 있습니다.
28=25628=256만큼의 크기를 갖는 자료형은 -128 ~ 127까지의 수를 표현하는데 이는 0을 표현하기 위해 양수 자리를 하나 사용하기 때문입니다.
그리고 배열에 num[0] = 3과 같이 일일이 값을 넣어도 되지만, 초기화 할 때 좀 더 편한 방법이 있습니다.
num[0] = 3
int num[4] = {3, 1, 4, 5};
만약 모든 성분을 0으로 초기화 하고 싶다면 다음과 같은 생략 표현을 쓸 수 있습니다.
int num[4] = {0, };
배열을 선언하는 경우에 한해 다음과 같이 길이를 생략할 수 있습니다.
int num[] = {1, 2, 3, 4};
그러면 C언어가 알아서 num[4]라고 생각합니다.
그런데 어차피 num[2]와 같이 사용할 바에 그냥 num2로 선언하면 되는 것이 아닐까요?
num2
물론 선언을 조금 더 짧게 할 수 있는 것도 장점이지만, 변수를 통해 접근할 수 있다는 장점이 있습니다.
예를 들어 배열에 저장된 값 중 양수의 개수를 세는 프로그램을 생각해봅시다.
int num[10] = {1, 3, 6, -3, 4, -1, 0, -5, -5, 7} int i = 0, positive = 0; for (i = 0; i < 10; i++) { if (num[i] > 0) { positive++; } } printf("양수는 %d개입니다.\n", positive);
결과
양수는 5개입니다.
만약 이를 일일이 num1부터 num10까지 변수를 만들어 검사해야 한다면 소스코드를 읽을때도 복잡하고 수정하기도 까다롭습니다.
이렇듯 num[i]와 같은 접근에 배열이 유용하게 사용됩니다.
01 #include <stdio.h> 02 #include <stdlib.h> 03 #define MAX 5 04 05 int _tmain(int argc, _TCHAR* argv[]) 06 { 07 int i; 08 int grade[MAX]; 09 10 for(i = 0; i < MAX; i++) 11 grade[i] = rand() % 100; 12 13 for(i = 0; i < MAX; i++) 14 printf("grade[%d]=%d\n", i, grade[i]); 15 16 system("pause"); 17 return 0; 18 }