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의 차이였습니다.
'프로그래밍 > C' 카테고리의 다른 글
| [C언어][자료구조][stack] 미로찾기 프로그램 (0) | 2019.01.10 |
|---|---|
| [C언어][과제] 숫자야구게임 만들어보기 (0) | 2019.01.03 |
| [C언어] 변수(variable) (0) | 2018.12.12 |
| [C언어][Visual studio2010] Helloworld 출력하기! (0) | 2018.12.12 |