이번 편의 목표: 연체료 계산을 함수로 분리하고, 인자로 넘긴 값이 복사된다는 점을 확인합니다.

함수는 이름 있는 작업입니다. 호출부는 결과만 받고, 계산식은 함수 안에 남습니다. C에서 인자는 값으로 전달됩니다. 함수 안의 매개변수는 호출자가 가진 변수의 복사본입니다.

C
#include <stdio.h>

int late_fee(int days, int daily) {
    return days * daily;
}

void try_change(int days) {
    days = 0;
    printf("함수 안에서는 %d\n", days);
}

int main(void) {
    int days = 3;

    try_change(days);
    printf("%d\n", days);
    printf("%d\n", late_fee(days, 100));
    return 0;
}

함수 안에서는 0이 출력됩니다. 매개변수를 0으로 바꿔도 main의 days는 3이고, late_fee(3, 100)은 300을 반환합니다. 호출자의 변수를 직접 바꾸려면 값이 아니라 주소를 넘깁니다. 주소는 09편의 포인터입니다.

함수를 main보다 아래에 두려면, main 위에 반환형과 매개변수만 먼저 적습니다. 이것을 선언이라고 합니다. 이번 예제처럼 본문을 호출보다 위에 두면 선언을 따로 적지 않아도 됩니다.

직접 해 보기

하루 요금과 일수를 받는 함수가 일수 5, 하루 150원이면 얼마를 반환하는지 계산한 뒤 출력으로 확인하세요.

해설

5 곱하기 150은 750입니다. 함수 안에서 매개변수 이름을 바꿔도 곱의 결과는 같습니다.