배열의 선언
배열 또한 다른 자료형처럼 선언을 통해서 저장 공간을 확보합니다. 다음은 배열을 선언하는 법입니다.
int array[5];
자료형 배열명[요소 개수]의 조합으로 선언을 할 수 있습니다. 다음은 이름을 저장하고 사용하는 방법입니다.
#include <stdio.h>
int main(void){
int arr[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = arr[0] + arr[1];
scanf("%d", &arr[3]);
printf("%d\n", arr[2]);
printf("%d\n", arr[3]);
printf("%d\n", arr[4]);
return 0;
}
실행 결과
50
30
50
-858993460
위 코드는 int arr[5]로 배열을 선언한 후에 첫 번째 요소부터 네 번째 요소까지 대입해준 뒤 세 번째 요소부터 출력해 주는 코드입니다. 마지막 요소는 입력받지 못했기 때문에 쓰레기 값이 나오는 것입니다.
선언할 때는 요소의 개수를 적지만 사용할 때는 몇 번째(index)인지 의미합니다. index값 0은 첫번째 요소를 의미하기 때문에 마지막 요소의 인덱스는 배열 요소(element) 개수 - 1 가 됩니다. 위 코드에서는 5 - 1 = 4가 되겠습니다.
배열 초기화
위 코드에서 보셨듯이 최초 할당된 공간에는 쓰레기 값이 저장되어 있습니다. 그러므로 배열도 초기화해주는 과정이 필요합니다. 배열의 기본적인 초기화 방법은 다음과 같습니다.
int arr[4] = {1, 2, 3, 4};
첫 번째 요소부터 차례로 초기화가 됩니다. (arr[0] = 1, arr[1] = 2, ...)
다음은 다양한 배열 초기화 방법입니다.
int arr1[4] = {1, 2, 3};
int arr2[100] = {0};
int arr3[] = {1, 2, 3};
배열 arr1은 초기값이 element의 개수보다 적은 경우입니다. 이런 경우엔 처음부터 차례대로 초기화한 후, 나머지는 0으로 초기화합니다.
배열 arr2의 초기화 방법은 arr1의 초기화 방법을 응용한 것입니다. 첫 번째 element만 0으로 초기화해주면 나머지도 알아서 0으로 초기화가 됩니다.
배열 arr3은 element의 개수를 적지 않은 경우입니다. 이럴 땐 초기값의 개수가 곧 배열의 크기가 됩니다. (1,2,3의 개수 3개 > arr3[3])
배열과 반복문
int arr[5] 배열의 element를 살펴보면 arr[0], arr[1], arr[2], arr[3], arr[4]까지 달라지는 것은 index밖에 없다는 것을 알 수 있습니다. 반복문에 이를 적용시키면 배열문의 진가를 발휘할 수 있습니다.
#include <stdio.h>
int main(void){
int score[5];
int i;
int total = 0;
double avg;
for(i = 0; i < 5; i++){
scanf("%d", &score[i]);
total += score[i];
}
printf("\n");
avg = total/5.0;
for(i = 0; i < 5; i++){
printf("%5d", score[i]);
}
printf("\n");
printf("평균 : %.1lf\n", avg);
return 0;
}
실행 결과
10
99
56
48
87
10 99 56 48 87
평균 : 60.0
위 코드는 점수를 입력받아 평균을 구하는 프로그램입니다. for문을 보면 index에 i를 넣어서 입출력한 것이 보입니다. i가 0부터 4까지 증가하는 동안 i에 대입되어 score[0] ~ score[4]가 되는 것이죠. 이처럼 반복문을 통해 배열을 다룬다면 데이터가 많더라도 유연하게 대응할 수 있습니다.
sizeof 연산자와 배열
위 코드처럼 작성할 수도 있지만 배열의 요소의 개수가 바뀌면 관련된 반복문을 모두 수정해야 한다는 점이 불편하고 비효율적입니다. 이럴 때 sizeof 연산자를 이용할 수 있습니다.
sizeof(배열명) / sizeof(element)
다음은 이를 이용한 코드입니다.
#include <stdio.h>
int main(void){
int score[5];
int i;
int total = 0;
double avg;
int count;
count = sizeof(score) / sizeof(score[0]);
for(i = 0; i < 5; i++){
scanf("%d", &score[i]);
total += score[i];
}
avg = total / (double)count;
for(i = 0; i < count; i++){
printf("%5d", score[i]);
}
printf("\n");
printf("평균 : %.1lf\n", avg);
return 0;
}
배열을 선언하면 요소의 크기, 배열의 크기가 모두 정해집니다. 그 두 개를 이용해 element의 개수를 구할 수 있게 되는 것입니다.