c++

Call by value 와 Call by reference

isaacagent 2024. 1. 15. 22:56
728x90

call by value 와 call by reference를 알아야 한다.

 

call by value의 간단한 예시를 들어보도록 해보자

#include <iostream>

void Swap(int a, int b){
    int temp = a;
    a = b;
    b = temp;
}


int main(){
    int A = 1;
    int B = 2;
    
    Swap(A,B);
    
    printf("%d %d\n",A,B);
}

 

Swap이란 함수가 호출이 되었지만, 이는 call by value로 호출되어 변수 A, B에 있는 값들만 복제되어 Swap으로 넘어간 것이다.

void는 return 문이 존재하지 않기 때문에 Swap 함수 내에서 인자 a, b의 변수 값만 바뀌었다.

결과적으로 main내에서는 바뀐 것이 없으므로 예상 결과값인 A=2, B=1 이 아닌 A=1, B=2 가 나오게 된다.

call by value의 결과값

 

그렇다면 call by reference는 어떨까?

#include <iostream>

void Swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}


int main() {
    int A = 1;
    int B = 2;

    Swap(&A, &B);

    printf("%d %d\n", A, B);
}

Swap함수 인자에 A, B의 reference 값을 전달을 해주고 Swap의 매개변수 포인터 a, b가 해당 reference 값을 가리킨 상태에서 swap을 진행을 하였다. 이 과정은 같은 주소에서 진행되었으므로 결과값이 A=2 , B=1 로 나오게 된 것이다.

 

call by reference의 결과값

 

 

'c++' 카테고리의 다른 글

C++ 동적 할당  (0) 2024.01.17
c++ 복사 생성자 관련  (0) 2024.01.15
c++ 생성자(constructor)  (1) 2024.01.10