pureness 님이 쓰신 글 :
: call by value 와 call by reference 를 비교해서 설명좀 해주세요~~
:
: 왠만하면 자세하게 좀.. ㅡㅡ;;
안녕하세요 만해입니다.
오랜만에 답변을 올리는군요 ㅋ ㅋ ㅋ
Call By Value 와 Call ByReference 의 차이는
호출된 함수에서의 그 변수의 값을 변경 시켰을때
그 변경된 값이 호출을 시킨 함수로 복귀 했을때 유지 되느냐 안되느냐로
차이가 난다고 할수 있습니다.
void CallByValue ( int a )
{
a = 10 ;
}
void CallByReference ( int * a )
{
*a = 10;
}
void main ( void )
{
int i = 5;
printf("Before Call By Value is %d",i);
CallByValue(i);
printf("After Call By Value is %d",i);
printf("Before Call By Reference is %d",i);
CallByReference(&i);
printf("After Call By Reference is %d",i);
}
이 소스의 결과는 이렇게 나옵니다.
Before Call By Value is 5
After Call By Value is 5
Before Call By Reference is 5
After Call By Reference is 10
Call ByValue 의 경우 그 함수 내부적으로 a라는 변수가 생성되고
그 변수가 생성된후 10 이란 값을 할당한후에
함수가 수행이 완료 되면 a 라는 변수는 삭제 됩니다.
이것은 main에서 전달해준 i라는 변수와 CallByValue에서 생성된 a 라는 변수가
전혀 무관 하다는 것이고요
CallByReference 는 main함수에서 정의된 i 라는 변수의 주소값을 넘기고
CallByReference 함수에서 a는 main 함수의 i 변수의 메모리 주소를 받게 됩니다.
이 상태에서 *a = 10; <-- 이 명령어는 a라는 변구가 가르키는 주소에 10이란 값을
넣기 때문에 main에서 정의된 i라는 변수에 값이 전달됩니다.
흑 수업 들어 가야 되네요 나중에 보충 답변 올려 드리겠습니다.
그럼 이만~
|