이거 ㅋㅋㅋ 제가 잘못 알고 있는건지 모르겠네요 ...
제가 공부해온 바로는 C Language는 Call by Reference가 없고,
Call by Value만이 있는 것으로 알고 있습니다.
그런데, 어디선가 이야기를 들어보니 ...
int *swap(int *x, int *y) <<<---- 이러한 구조를 Call by Reference라고 했다는군요 ...
제가 알기론 C에서 오직 Call by Value만 사용하는데,
Memory Address도 일종의 Value로 취급하는 것으로 알고 있습니다.
그리고 진짜 Call by Reference는 C++에서 지원하는 걸로 압니다.
Reference란 Memory Space에 이름 or 접근성을 부여하는 것을 뜻하는 걸로 알고 있습니다.
즉, C는 Memory 공간에 이름 or 접근성을 부여하는 메카니즘이 없는 것으로 압니다.
어떤분의 말씀으론 자꾸 int *swap(int *x, int *y)가 Call by Reference라고 해서
그동안 제가 알고 있었던 것이 잘못 된건가 생각중입니다 ㅡ_ㅡ;;; ㅎ
이에 대해 좀 더 구체적이고, 명확하게 설명해주실 분 ?
제가 알고 있는 것이 맞는지 알려주3 ~~~
call by value와 call by reference라는 것을 개념적으로만 놓고 봤을 때,
전달하고자 하는 값을 직접 전달했을 때는 call by value,
그 외 그 값을 참조할 수 있는 정보로 전달했을 때는 call by reference라고 합니다.
따라서 c에서 많이 사용하는 포인터에 의한 매개변수 전달도 참조에 의한 전달이라 할 수 있습니다.
실제 함수 호출시 스택에 푸쉬되는 값이 특정 변수의 값이 아니라 참조값이 전달되는 것이지요.
물론 여기서 말하는 참조값이라는 것이 그 변수의 주소'값'이기 때문에 역시 값이 될 수도 있는 것이지요.
상훈님이 생각하시는게 맞습니다..^^
포인터 매개변수 전달을 call by reference라고 설명하는것은
포인터에 대한 이해를 좀더 쉽게 설명하려고 그러지 않았을까 생각되네요.