함수가 외부로부터 매개 변수를 통하여 데이터를 받는 방법(함수 호출 시 인수 전달 방식)
(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()의 인수로 전달함
- 포인터보다 사용하기 편리함
'Computer Science > Programming Language' 카테고리의 다른 글
[C++] 접근자와 설정자 (0) | 2020.06.14 |
---|---|
[C++] 객체의 동적 생성 (0) | 2020.06.14 |
[C++] 참조자(reference) (0) | 2020.06.13 |
[C/C++] 동적 메모리 할당(dynamic memory allocation) (0) | 2020.06.12 |
[C/C++] 변수 (지역변수, 전역변수) (0) | 2020.06.10 |