본문 바로가기
IT/C Language

참조의 의한 전달2 (call by reference)

by Jang HyunWoong 2014. 12. 19.

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void Swap(int &x, int &y);
  5.  
  6. int main() {
  7. // your code goes here
  8. int firstNum = 3, secondNum = 5;
  9.  
  10. Swap(firstNum, secondNum);
  11.  
  12. cout << "firstNum is " << firstNum << endl;
  13. cout << "secondNum is " << secondNum << endl;
  14. return 0;
  15. }
  16.  
  17. void Swap(int &x, int &y)
  18. {
  19. int temp = x;
  20. x = y;
  21. y = temp;
  22. }

 

firstNum is 5
secondNum is 3

 

Swap함수를 호출할 때 firstNum, secondNum이라는 실 인수를 넘겨주고 있다. 

Swap 함수를 정희하는 부분에서 선언한 두 개의 참조인 &x와 &y는 이 두 개의 실인수를 가리키게 된다. 

즉 변수 firstNum와 secondNum는 각각 x, y라는 다른 이름(alias)를 가지게 되는 것이다.

 

C++로 프로그램을 적성하다 보면, 참조에 의한 전달을 자주 사용하게 된다. 

값에 의한 전달보다도 전달 속도가 빠르고, 주소에 의한 전달보다는 더 간단하고 안정적이기 때문이다. 그런데, 참조에 의한 전달에도 약점이 있다. 즉, 함수 안에서 임의로 변수의 값을 변경하기 때문이다. 

따라서 참조를 사용하여 전달하는 경우에 프로그래머는 함수의 내부 처리 과정에 일일이 신경을 써야 한다. 

 

참조로 전달하되 값을 바꾸고 싶지 않은 경우라면 참조를 const로 선언함으로써 상수 형태로 만들면 문제가 해결된다. 

 

Ex)

int Sum(const int &firstNum, const int &secondNum)

{

...

firstNum = 10; // 상수형 참조에 값을 대입할 수는 없다. 

...

}

but

int Sum(const int &firstNum, const int &secondNum)

{

...

return (firstNum + secondNum); //가능하다.

}

 

예제를 통해서 상수형 참조 인수를 사용해 보겠다. 

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int Sum(const int &firstNum, const int &secondNum);
  5.  
  6. int main() {
  7. // your code goes here
  8. int num1=10, num2=20;
  9.  
  10. cout << "두 정수의 합 = " << Sum(num1, num2) << endl;
  11. return 0;
  12. }
  13.  
  14. int Sum(const int &firstNum, const int &secondNum)
  15. {
  16. return (firstNum + secondNum);
  17. }

 

두 정수의 합 = 30

 


반응형

'IT > C Language' 카테고리의 다른 글

값, 주소에 의한 배열 전달  (0) 2014.12.19
다차원 배열 초기화 / 배열의 이름  (0) 2014.12.19
함수에 자료 전달 방법  (0) 2014.12.19
template 함수  (0) 2014.12.19
함수의 다형성(polymorphism) 1  (0) 2014.12.19