[C언어] 배열 : 선언과 사용

조아리 ㅣ 2024. 8. 20. 11:11

반응형

배열의 선언

배열 또한 다른 자료형처럼 선언을 통해서 저장 공간을 확보합니다. 다음은 배열을 선언하는 법입니다.

 

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의 개수를 구할 수 있게 되는 것입니다. 

 

반응형