[C++] Call by value, Call by reference

    Call by value 값에 의한 호출

    함수에서 값을 복사해 전달하는 방식

    #include <stdio.h>
    
    void Swap(int x, int y)
    {
        int temp = x;
        x = y;
        y = temp;
    }
    
    int main()
    {
        int a = 10;
        int b = 20;
        
        Swap(a, b);
        
        printf("a: %d, b: %d", a, b);
    }

    Swap 함수의 매개변수 x, y가 함수 호출과 동시에 선언되면서 인자로 전달받은 a, b의 데이터 값이 들어가게 된다

    int x = a;인 셈

    데이터 값만 복사되어 들어갔기 때문에 원본에 영향을 끼치진 않는다 Swap 함수 실행 후에도 a, b의 값은 바뀌지 않음


    Call by reference 참조에 의한 호출

    함수에서 주소값을 복사해 전달하는 방식

    #include <stdio.h>
    
    void Swap(int* x, int* y)
    {
        int temp = x;
        x = y;
        y = temp;
    }
    
    int main()
    {
        int a = 10;
        int b = 20;
        
        Swap(&a, &b);
        
        printf("a: %d, b: %d", a, b);
    }

    a, b 변수의 주소값을 참조하여 값을 변경했기 때문에 원본 데이터 값이 변경된다


    Call by value vs Call by reference

     

    Call by value

      -  장점: 복사하여 처리하기 때문에 원본의 값이 보존된다

      -  단점: 직접 복사하기 때문에 메모리 사용량이 증가하고 속도가 느리다

     

    Call by reference

      -  장점: 직접 참조하므로 속도가 빠르다

      -  단점: 원본 값이 영향을 받는다

    댓글