본문 바로가기

: any

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

반응형

두 숫자를 바꿔주는 swap() 함수를 예제로 아래 세 가지를 알아보자. 

  • Call by reference
  • Call by address
  • Call by value --> 얘만 안되니까 얘부터 시작

 

 


Call by value

결과에 주목하세요. a와 b는 변경이 되지 않는다. 

#include <stdio.h>

// call by value
void swap(int a, int b) {
    int temp;
    temp = a;
    a = b;
    b = temp;
}

int main() {
    int a = 3;
    int b = 7;

    swap(a, b);

    printf("swap(a, b) : [%d], [%d]\n", a, b);
    return 0;
}

result

swap(a, b) : [3], [7]

 

 


Call by address

주소 값을 전달합니다.
함수에서는 포인터를 사용하여서 표연하여야 하고,
입력 받는 곳에서는 주소 참조연산자를 붙여야 한다.

** & : 주소 참조 연산자

#include <stdio.h>

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

int main() {
    int a = 3;
    int b = 7;
    
    swap(&a, &b);
    
    printf("swap(a, b) : [%d], [%d]\n", a, b);
    return 0;
}

result

swap(a, b) : [7], [3]

 

 


Call by reference

(only in C++, 참조연산자 사용 가능)

함수에서 값을 받을 때, 주소 참조 연산자를 사용하여 받습니다.
함수의 변수선언 부분의 의미는 주소를 '찾아가서, 해당 값을 읽으세요.'

#include <stdio.h>

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

int main() {
    int a = 3;
    int b = 7;
    
    swap(a, b);
    
    printf("swap(a, b) : [%d], [%d]\n", a, b);
    return 0;
}

result

swap(a, b) : [7], [3]
반응형