이번 편의 목표: 가격 여러 개를 배열에 두고, 함수에는 시작 주소와 개수를 함께 넘깁니다.

배열은 같은 자료형의 값을 메모리에 나란히 둡니다. 첫 원소의 번호는 0입니다. 원소가 3개면 유효한 번호는 0, 1, 2입니다. 그 밖을 읽거나 쓰면 동작이 정의되지 않습니다.

C
#include <stdio.h>

int total_price(const int *prices, int count) {
    int sum = 0;
    for (int i = 0; i < count; i++) {
        sum += prices[i];
    }
    return sum;
}

int main(void) {
    int prices[3] = {12000, 1800, 9000};

    printf("%d\n", prices[0]);
    printf("%d\n", total_price(prices, 3));
    return 0;
}

prices[0]은 12000입니다. 세 가격의 합은 22800입니다. 배열 이름은 함수로 넘기면 첫 원소의 주소가 됩니다. 함수 안에서는 원소 개수를 sizeof로 되돌릴 수 없으므로 count를 따로 넘깁니다.

main 안에서는 sizeof(prices) / sizeof(prices[0])가 3입니다. 이 계산은 배열 선언이 보이는 함수에서만 맞습니다. const int *는 함수가 가격을 읽기만 한다는 표시입니다.

직접 해 보기

가격을 하나 더 넣어 원소를 4개로 만들고, total_price에 넘기는 개수도 4로 맞추세요.

해설

개수를 3으로 남기면 네 번째 가격은 합에 들어가지 않습니다. 배열 길이와 함수에 넘기는 count는 같은 값이어야 합니다.