함수가 외부로부터 매개 변수를 통하여 데이터를 받는 방법(함수 호출 시 인수 전달 방식)

(1) 값에 의한 호출(call by value)

(2) 참조에 의한 호출(call by reference)

 

값에 의한 호출 (= 복사본 전달)

"복사본 전달"인 이유: 복사본을 아무리 바꿔도 원본이 바뀌지 않음

 

#include <iostream>
using namespace std;

void swap(int x, int y);

int main() {
	int a = 100, b = 200;
	cout << "swap 호출 전 (a,b) : (" << a << "," << b << ")" << endl;	//(100,200)

	swap(a, b);
	cout << "swap 호출 후 (a,b) : (" << a << "," << b << ")" << endl;	//(100,200)

	return 0;
}

void swap(int x, int y) {
	int tmp;
	tmp = x;
	x = y;
	y = tmp;

}

 

위의 코드를 보면

호출 전과 호출 후의 a, b값이 동일하게 나옴

- 함수로 변수의 값만 전달되기때문에 원본 변수 자체를 변경할 수 없음

 

참조에 의한 호출

- 전역변수를 사용하지 않고 함수 외부의 변수들을 참조하여 변경 가능하기 때문에 사용

 

참조에 의한 호출 사용 방법

(1) pointer(포인터) 사용

(2) reference(참조자) 사용

 

참조에 의한 호출 - pointer 

- 함수가 포인터를 통하여 변수의 주소를 받을 경우, 함수는 그 주소에 위치한 변수의 값 변경 가능

#include <iostream>
using namespace std;

void swap(int* px, int* py);

int main() {
	int a = 100, b = 200;
	cout << "swap 호출 전 (a,b) : (" << a << "," << b << ")" << endl;	//(100,200)

	swap(&a, &b);
	cout << "swap 호출 후 (a,b) : (" << a << "," << b << ")" << endl;	//(200,100)

	return 0;
}

void swap(int* px, int* py) {
	int tmp;
	tmp = *px;
	*px = *py;
	*py = tmp;

}

 

- 함수 호출시 인수가 a,b가 아닌 &a,&b 이어야함(값이 아닌 변수의 주소 전달)

 

참조에 의한 호출 - reference

- 함수의 매개변수를 참조자로 선언하게 되면 호출된 함수에서는 이 참조자를 이용하여 원본 변수의 값 수정할 수 있음

#include <iostream>
using namespace std;

void swap(int &rx, int &ry);

int main() {
	int a = 100, b = 200;
	cout << "swap 호출 전 (a,b) : (" << a << "," << b << ")" << endl;

	swap(a, b);
	cout << "swap 호출 후 (a,b) : (" << a << "," << b << ")" << endl;

	return 0;
}

void swap(int &rx, int &ry) {
	int tmp;
	tmp = rx;
	rx = ry;
	ry = tmp;

}

 

- 위의 코드에서 swap( )함수의 정의를 보면, 매개변수 rx,ry가 참조자로 선언되어 있음

- main()에서 swap()를 호출할 때는 변수a,b가 swap()의 인수로 전달함

- 포인터보다 사용하기 편리함

 

+ Recent posts