프로그래밍 언어/C

C언어 15강 매개변수 전달방법 2.call by reference(참조에 의한 호출)

happy_life 2020. 11. 3. 17:19

참조에 의한 호출은 실 매개변수의 주소 값을 호출되는 함수의 형식 매개변수에 전달하는 방식. 실 매개변수와 형식 매개변수가 동일한 메모리 공간 주소를 사용하므로, 형식 매개변수의 값이 변경되면, 실 매개변수의 값도 변경된다.

 

C언어에서는 참조에 의한 호출을 사용하기 위해 포인터변수를 활용해야 한다. 포인터(*) 변수는 메모리 공간의 주소를 기억하고 있는 변수.

 

C언어에서는 call by value밖에 없다.따라서 참조에 의한 호출을 사용하기 위해서는 포인터 변수를 사용해야 하는 것이다.

 

코드 보면서 이해하자..

#include <stdio.h>

void swap(int *x, int *y)  
{
	int temp;

	temp = *x;
	*x = *y;
	*y = temp;

}


int main() {

	int a = 10, b= 20;

	printf("\n■Call By Reference 프로그램■\n");
	printf("---------------------------\n");
	printf("함수 호출 전 a값,b값 : %d, %d\n\n", a,b);
	printf("      >함수 호출<         \n\n");

	swap(&a, &b);

	printf("함수 호출 후의 a값,b값: %d, %d\n\n", a,b);
	
	

	

	return 0;

}

call by reference는 주소 값 자체를 가져온다고 하였으므로 & , * 가 사용되는 것이다.

 

1) temp의 메모리 주소가 3> 1로 바뀌고 거기에 있던 값 '10'까지 들어간다.

2) a의 메모리 주소가 1>2로 바뀌고 거기 있던 값 '20'까지 들어간다

3) b의 메모리 주소가 2>1(1로 바뀐 temp메모리 주소)로 거기 있던 값'10'까지 들어간다.

 

따라서 변수 a의 메모리 주소는 "2" 값은 "20"

          변수 b의 메모리 주소는 "1"값은 "10"이므로

결괏값은 이렇게 도출된다.