Minwoo Dev.

[C++] 참조자를 이용하여 함수 만들기, Call by reference with reference 본문

C++

[C++] 참조자를 이용하여 함수 만들기, Call by reference with reference

itisminu 2024. 3. 10. 17:26
728x90
반응형
SMALL

참조자를 이용해서도 포인터를 사용하는 것처럼 Call-by-reference 형식의 함수를 만들 수 있다.

 

Call-by-reference

  • 함수 외부의 값을 받아와 함수 내부에서 값을 변경할 수 있는 형태
  • C언어에서는 포인터를 사용하여 함수 외부의 값을 함수 내부에서 변경할 수 있었다.

 

 

우선, 포인터를 이용한 기존의 방식부터 살펴보자.

 

 

포인터를 이용한 Call-by-reference 함수

#include <iostream>
using namespace std;

void Swap(int *n1, int *n2)
{
    int temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

int main(void)
{
    int num1 = 3, num2 = 5;
    cout << "Before Swap" << endl;
    cout << "num1 : " << num1 << endl;
    cout << "num2 : " << num2 << endl
         << endl;
    Swap(&num1, &num2);

    cout << "After Swap" << endl;
    cout << "num1 : " << num1 << endl;
    cout << "num2 : " << num2 << endl;

    return 0;
}

 

 

포인터를 이용하여 전달받은 두 값을 서로 바꿔주는 함수이다.

 

결과

 

 

 

 

참조자를 사용한 Call-by-reference

#include <iostream>
using namespace std;

void Swap(int &n1, int &n2)
{
    int temp = n1;
    n1 = n2;
    n2 = temp;
}

int main(void)
{
    int num1 = 3, num2 = 5;
    cout << "Before Swap" << endl;
    cout << "num1 : " << num1 << endl;
    cout << "num2 : " << num2 << endl
         << endl;
    Swap(num1, num2);

    cout << "After Swap" << endl;
    cout << "num1 : " << num1 << endl;
    cout << "num2 : " << num2 << endl;

    return 0;
}

 

 

이번에는 참조자를 이용하여 Swap 함수를 구현한 모습이다.

 

 

결과

 

 

포인터를 사용한 함수와의 차이점은 main 코드 내부에서도 드러난다.

포인터를 사용한 함수는 인자값으로 &를 붙여 주소값을 전달해야하지만, 참조자를 사용하면 변수를 그대로 넣어주면 된다.

 

 

 

 

728x90
반응형
LIST