## C 언어에서 값 전달과 참조 전달(Call By Value and Call By Reference)
C 언어에서 함수에 인자를 전달할 때, 값을 복사하여 전달하는 "값 전달(Call By Value)" 방식과 메모리 주소를 전달하여 원래 변수의 값을 변경하는 "참조 전달(Call By Reference)" 방식이 있습니다. 이번 글에서는 이 두 방식을 사용하는 예제 코드를 살펴보고자 합니다.
우선, 값 전달 방식을 사용하여 변수의 값을 증가시키는 함수 `increase_by_12()`와 참조 전달 방식을 사용하여 변수의 값을 증가시키는 함수 `increase_by_15()`를 작성해보았습니다.
// call_by_value_and_reference.c
#include <stdio.h>
// 값 전달(Call By Value)을 이용하여 변수의 값을 12 증가시키는 함수
void increase_by_12(int value)
{
value += 12;
}
// 참조 전달(Call By Reference)을 이용하여 변수의 값을 15 증가시키는 함수
void increase_by_15(int* value)
{
*value += 15;
}
// Entry Point
int main(void)
{
int num = 7;
// 값을 전달하여 num 값을 증가시키는 함수 호출
increase_by_12(num);
num++; // num = 8
printf("값 전달 후 메인 : %d\n", num); // [1] 8
// 주소를 전달하여 num 값을 증가시키는 함수 호출
increase_by_15(&num);
num++; // num = 24
printf("참조 전달 후 메인 : %d\n", num); // [2] 24
return 0;
}
위 코드에서 `increase_by_12()` 함수는 값 전달 방식을 사용하여 `value`라는 변수에 `num`의 값을 복사한 후 이를 증가시킵니다. 따라서 `num`의 값은 증가되지 않습니다.
반면, `increase_by_15()` 함수는 참조 전달 방식을 사용하여 `value`라는 변수에 `num`의 메모리 주소를 전달한 후 이를 증가시킵니다. 따라서 `num`의 값도 함께 증가됩니다.
위 예제 코드를 실행하면 다음과 같은 결과가 출력됩니다.
```output
값 전달 후 메인 : 8
참조 전달 후 메인 : 24
```
이번 글에서는 C 언어에서 함수의 인자를 전달하는 두 가지 방식인 값 전달과 참조 전달에 대해 살펴보았습니다. 값 전달 방식은 인자 값을 복사하여 전달하므로 원래 변수의 값을 변경할 수 없다는 단점이 있습니다. 따라서 변수의 값을 변경하려면 참조 전달 방식을 사용해야 합니다.
끝.