프로그래밍/C

[함수] call by reference 와 call by value

RYMIN 2020. 5. 28. 11:49

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

함수의 파라매터를 전달할때 을 전달하는 방식을 Callby value

함수의 파라매터를 전달할때 메모리의 접근에 사용되는 주소을 전달하는 방식을 Callby reference

그럼 이 두 개념이 왜 필요한지 보도록 하겠습니다.

 

/* Call by value */

#include <stdio.h>

void add(int n){
     n++;
     printf(" in function : %d\n",n);
}

int main(){
  int number = 10 ;

  printf("number is %d\n",number);

  add(number);

  printf("number is %d\n",number);

  return 0;
}

결과값

number is 10
in function 11
number is 10

 

코드에서 의도한 바는 number를 +1 시키고 싶었지만 호출된 함수에서 값이 변경 되어도 함수 호출후에 값을 확인해보면 값이 변경 되지 않아있는 것을 볼수 있습니다. 

 

그 이유는 호출하면서 넣어준 인자의 값을 복사받아서 함수내에서만 변형을 시켰을 뿐 원래 주소에 있는 number에는 아무런 변화가 일어나지 않기 때문입니다. 

 

/* Call by reference*/

#include <stdio.h>

void add(int *n){
     (*n)++;
     printf(" in function : %d\n",n);
}

int main(){
  int number = 10 ;

  printf("number is %d\n",number);

  add(&number);

  printf("number is %d\n",number);

  return 0;
}

결과값

number is 10
in function 11
number is 11

 

이번에는 주소값을 전달하는 방식으로 주소에 있는 값을 직접 변경하여 main 함수 에 있는 number값이 변경 된것을 볼 수 있습니다. 

 

이상 call by value와 call by reference의 차이였습니다.