C++에서는 함수 외부에 선언된 변수의 접근방법으로 두 가지가 존재합니다. 하나는 '주소 값'을 이용하는 방식이고, 다른 하나는 '참조자'를 이용하는 방식입니다. 

  • 주소 값을 이용한 Call-by-reference
  • 참조자를 이용한 Call-by-reference

Call-by-reference의 가장 큰 핵심은 함수 내에서 함수 외부에 선언된 변수에 접근할 수 있다는 것입니다. 참조자를 이용해서 함수를 정의해도 이러한 일이 가능합니다.


void SwapByRef2(int & &ref1, int &ref2)

{

int temp = ref1;

ref1 = ref2;

ref2 =temp;

// Call-by-reference

}


다음과 같이 질문할 수도 있겠습니다. " 참조자는 선언과 동시에 변수로 초기화되어야 한다면서요!"


맞습니다. 하지만 매개변수는 함수가 호출되어야 초기화가 진행되는 변수들입니다. 즉, 위의 매개변수 선언은 초기화가 이뤄지지 않은 것이 아니라, 함수호출 시 전달되는 인자로 초기화를 하겠다는 의미의 선언입니다.


int main(void)

{

int val1 = 10;

int val2 = 20;

SwapByRef2(val1, val2);

cout << "val1: "<<val1 << endl;

cout << "val2: "<<val2 << endl;

return 0;

}


매개변수로 선언된 참조자 ref1과 ref2는 main 함수에서 선언된 val1과 val2의 또 다른 이름이 됩니다. 그리고 SwapByRef2 함수 내에서는 이 두 참조자를 통해서 값의 교환 과정을 거치기 때문에, 그 결과는 실제로 val1과 val2의 값의 교환으로 이어집니다.



출처

  • 열혈 C++ 프로그래밍

+ Recent posts