본문 바로가기

C++ 기초 1

[C++] 1-8 함수의 참조 전달 (참조자 매개변수)

함수의 참조자 매개변수

   참조자를 가인수로 사용하여 call by reference 방식의 프로세스를 자동화할 수 있다. 참조자를 가인수로 사용하면 실인수 앞에 &를 붙이지 않아도 컴파일러는 실인수의 주소를 자동적으로 가인수에 전달한다 (실제로는 실인수 앞에 &를 붙이면 오류가 발생하므로 주의해야 한다). 함수의 가인수로 참조자를 사용하면 포인터를 가인수로 사용하는 call by reference방식과 동일한 효과를 얻을 수 있다. 그리고 포인터 연산자를 사용하는 번거로움을 피할 수 있으니 편리하다. 

 

예제
#include <iostream>
using namespace std;
void swap(int& x, int& y);		//함수의 원형 선언

int main()
{
	int x, y;
	x = 100, y = 600;
	cout << "original values: ";
	cout << "x=" << x << ",y=" << y << endl;
	swap(x, y);					//함수호출//기호 &를 실인수 앞에 붙이지 않는다.
	cout << "new values: " << endl;
	cout << "x=" << x << ",y=" << y << endl;
	return 0;
}

void swap(int& a, int& b)		//참조자가 가인수를 사용 //int &a=x, int &b=y
{
	int temp;
	temp = a;					//가인수 a는 참조자이므로 기호 *를 붙이지 않는다.
	a = b;						//가인수 a는 참조자이므로 기호 *를 붙이지 않는다.
	b = temp;
}
결과
original values: x=100,y=600
new values: x=600,y=100

※ 참조자를 가인수로 사용하여 call by reference 방식의 프로세스를 자동화할 수 있다. 참조자를 가인수로 사용하는 경우에는 실인수 앞에 &를 붙이지 않는다.
※ 참조자 가인수 a는 실인수 x와 동일하며 참조자 가인수 b는 실인수 y와 동일하다.
※ 피 호출 함수 swap()에서 참조자 가인수 a와 b의 값을 서로 바꾸면 대응되는 실인수 x와 y의 값도 바뀌게 된다. 이때 참조자 가인수 a와 b앞에 *를 사용하지 않는다. 
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13