난 이 차이점을 알기위해서 각종 블로그를 뒤져보았다.
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 |