개발 기록/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 값이 서로 바뀌게 되는 것이다.

 

반응형