개발 기록/C Language
[C언어] call by value, call by reference | 값에 의한 호출, 참조에 의한 호출
우준성
2021. 8. 24. 10:08
call by value : 값에 의한 호출
call by reference : 참조에 의한 호출
값에 의한 호출은 함수에 주는 값(인자)이 다른 변수에 그대로 복사되는 것이고,
참조에 의한 호출은 함수에 주는 값(인자)의 주소를 매개변수로 받는 것이다.
아래 예제를 보자.
#include <stdio.h>
void swap1(int a, int b) // call by value (값만 넘겨줌.)
{
int t = a;
a = b;
b = t;
}
void swap2(int* a, int* b) // call by reference (주소를 넘겨줌.)
{
int t = *a;
*a = *b;
*b = t;
}
int main()
{
int n1 = 5, n2 = 7;
printf("n1 = %d, n2 = %d\n", n1, n2);
swap1(n1, n2);
printf("n1 = %d, n2 = %d\n", n1, n2);
swap2(&n1, &n2);
printf("n1 = %d, n2 = %d\n", n1, n2);
return 0;
}
코드에서는 swap1 함수가 call by value이고, swap2 함수가 call by reference 이다.
swap1 함수의 매개변수는 int a, int b인데, 메인 함수에서 swap1 함수를 호출할 때 5와 7의 값이 int a, int b에 그대로 복사된다. 그리고 함수 내부에서 복사된 값들이 서로 바뀌고, 메인 함수의 n1, n2 값은 바뀌지 않는다.
반면 swap2 함수의 매개변수는 int* a, int* b 로 포인터 변수이다. 그로써 swap2 함수를 호출할 때 n1의 주소와 n2의 주소를 넘겨줘서 a, b가 n1, n2에 직접 접근할 수 있다. 마침내 메인 함수의 n1, n2 값이 서로 바뀌게 되는 것이다.
반응형