본문 바로가기

프로그래밍/c언어

Call by value, Call by reference


난 이 차이점을 알기위해서 각종 블로그를 뒤져보았다.

Call bu value와 Call by reference의 차이점
값을 복사해서 넘기느냐 주소값을 넘기느냐.

--------------------------------------------
void call_by_value(int);
void call_by_reference(int *);
int main()
{
int a=0,b=0;
call_by_value(a);
call_by_reference(&b);
printf("call_by_value : %d\n",a);
printf("call_by_reference : %d\n",b);
getch();
return 0;

}

void call_by_value(int A)
{

A=6;
}
void call_by_reference(int *B)
{

*B=6;
}
  
/*
위소스를 테스트하면 a의 값은 변하지않음.
왜냐하면 call_by_value 함수를 실행할때
A값은 단순히 a의값을 대입한 값일 뿐임.
call_by_reference함수를 실행할 때
B라는 값은 b의 주소값을 대입했기 때문에
B에 해당된 주소가 가리키는 값을 바꿔버려서
b의값을 바꿔주는 것임
출처:http://blog.naver.com/cz_1011?Redirect=Log&logNo=50102669706
*/
--------------------------------------------

cf)
scanf이 함수의 사용할때의 &쓰임새를  알 수가있다.
scanf("%d",&val)에 만약 &를 빼버린다면 Call bu value가 되어버려 val값이 복사되어 인자로 넘어가게 된다.
그러면 사용자가 값을 입력하면 우리가 선언한 val이 아닌 복사된 어느 메모리로 입력 값이 들어갈 것이다.
그러면 우리는 그 입력값을 갖고 코딩 할 수가 없게 된다.
따라서 주소값을 넘겨줘 call by reference형식으로 값을 넘겨 우리가 선언한 진짜 val에 값을 입력 할 수 있도록 하는 것이다.
참조 : http://hyangmi22.blog.me/10077631363

'프로그래밍 > c언어' 카테고리의 다른 글

BMI비만도측정 프로그램  (0) 2011.01.07
c언어 학교선배 시험  (0) 2011.01.07
글자/문자 색넣기  (0) 2010.11.18
ASCII코드  (0) 2010.11.13
gotoxy 함수 정의  (0) 2010.11.12