C++에서는
Call-by-reference의 구현 방법에
참조자를 매개변수로 전달하는 방법과 주소 값을 이용하는 방법 이렇게 두가지가 있다.
참조자는 선언과 동시에 변수로 초기화 되어야하는데...
매개변수는 함수가 호출되어야 초기화가 진행되는 변수들이다.
이 말은 함수호출 시 전달되는 인자로 초기화를 하겠다는 의미이다 !!
참조자를 이용하여 인자로 전달된 int 형 변수 값 1씩 증가시키는 함수와 부호를 바꾸는 함수와 main을 만들고 출력해봐라
#include <iostream>
using namespace std;
void pp(int &ref1)
{
ref1+=1;
}
void re(int &ref2)
{
ref2*=-1;
}
int main(void)
{
int num = 1;
pp(num);
cout<<num<<endl;
re(num);
cout<<num<<endl;
return 0;
}
성공 !
위의 코드에서 re(2)를 re(num)대신 사용하면 에러가 뜬다.
왜 그럴까?
-> 참조자는 상수를 참조할 수 없다!!!
그러므로 매개변수의 인자로 반드시 변수가 등장해야한다.
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 5;
int *ptr1 = &num1;
int num2 = 10;
int *ptr2 = &num2;
SwapPointer(ptr1,ptr2);
cout<<*ptr1<<endl;
cout<<*ptr2<<endl;
return 0;
}
여기에 SwapPointer 함수를 짜주자 !
#include <iostream>
using namespace std;
void SwapPointer(int *(&ref1), int *(&ref2))
{
int *temp = ref1;
ref1 = ref2;
ref2 = temp;
}
int main(void)
{
int num1 = 5;
int *ptr1 = &num1;
int num2 = 10;
int *ptr2 = &num2;
SwapPointer(ptr1,ptr2);
cout<<*ptr1<<endl;
cout<<*ptr2<<endl;
return 0;
}
끗
c 와 다르게 c++ 에서는 참조자를 통해서 함수내에서 값 변경이 가능하므로 const선언을 추가해서 헷갈림을 방지할 수 있다 !
위의 단점때문에 참조자를 많이 사용안하고 포인터를 사용하는 프로그래머들도 많다.
다음 포스트에서 이어가겠다.