프로그래밍/C, C++

Call by value vs Call by reference

유니디니 2020. 12. 12. 00:00
728x90
반응형

Call by value와 Call by reference는 함수 호출방식을 의미합니다. 

 

  • 값을 전달하는 형태의 함수 호출 방식 : Call by value
  • 주소 값을 전달하는 형태의 함수 호출 방식 : Call by reference

1. 값을 전달하는 형태의 함수 호출 방식 : Call by value(값)

 

함수를 호출할 때 인자로 전해지는 변수에 값을 전달하는 방식을 Call by value(값)라고 한다. 일반적인 변수를 이용한 함수에서 사용되며 값을 복사해서 전달하기 때문에 원래의 변수(main부분)에 영향을 주지 않는다.

 

#include <stdio.h>

void swap(int a, int b){
    int temp;
    temp = a;
    a = b;
    b = temp;
    printf("a, b : %d, %d\n", a, b);
}

int main(){
    int n, m;
    
    n = 10;
    m = 20;
    
    printf("swap 전 : %d, %d\n", n,m);
    swap(n,m);
    printf("swap 후 : %d, %d\n", n,m);
    
    return 0;

result

swap 전 : 10, 20

a, b : 20, 10

swap 후 : 10, 20

 

2. 주소 값을 전달하는 형태의 함수호출 : Call by reference(참조값)

 

main부분 즉, 원래의 변수를 바꾸기 위해선 n과 m의 주소값을 전해주면 된다. 함수에서 n과 m에 직접 접근이 가능해진 것이다.

변수 앞에 &는 주소값을 의미합니다(&변수), 그러나 배열은 &가 필요없답니다.😅

 

#include <stdio.h>

void swap(int *nptr1, int *nptr2)
{
    int temp;
    temp = *nptr1;
    *nptr1 = *nptr2;
    *nptr2 = temp;
}

int main(void)
{
    int n = 10;
    int m = 20;
    
    printf("swap 전 : %d, %d", n, m);
    
    swap(&n, &m);
    
    printf("swap 후 : %d, %d", n, m);
    return 0;
}

result

swap 전 : 10, 20

swap 후 : 20, 10

 

참고자료 : 윤성우의 열혈 C 프로그래밍

반응형