call by value 는 복사에 의한 값의 전달. 즉 전달된 값을 함수 내부에서 수정해도 원본자체(?)의 영향을 받지 않습니다.
call by reference 는 포인터 참조등을 통해 값을 전달하는 경우이죠. 전달된 값을 함수 내부에서 수정하면 원본자체에도 영향을 받습니다.
2010.03.30 09:19:46 (*.36.230.141)
랩하는좀비
언제나 친절한 1ststroy.
call by address라고 쓰기도 하지만 대체로 call by reference라고 합지요.
근데 pointer와 참조로 구분을 하는 사람도 있습니다만.. 동작은 거의 비슷하기 때문에 구분하는 것은 무의미 할 듯.
2010.03.30 10:08:42 (*.138.56.132)
게임초보
call by address 라고 쓰는 것은 처음 보았는 데 어떤 자료(책등)에 그런 표현이 나와있나요?
2010.03.30 10:10:33 (*.76.115.36)
bard
C언어에서는 pointer 개념이 주소 개념인지라, call by address 라는 용어를 많이 썼습니다.
2010.03.30 14:01:22 (*.181.242.129)
자갈공명
PL시간에 배우기로는
call by value
call by reference
call by result
call by value result
정도가 있었습니다만 result/value result는 기억이 안나네요...
그리고 C는 call by value만이 존재합니다. 원칙적으로는 포인터도 하나의 값(value)이고, 이 값이 복사되어 넘어가는 것이기때문입니다.
(다만 포인터의 특성을 이용해 reference를 흉내낸거죠.)
C++의 참조가 진짜 reference입니다만...내부구현은 포인터라니 그게 그거긴 합니다..
※ 2010-03-30 14:01:55 에 "자갈공명(ksangho77)" 에 의해 수정됨
※ 2010-03-30 14:02:11 에 "자갈공명(ksangho77)" 에 의해 수정됨
2010.03.30 17:20:14 (*.249.126.21)
텨텨
call by value라면 함수내에서 변화를 줘도 배열값에는 영향이 없어야 하는데 함수내에서 바꿔주면 나중에 출력할때 바뀌네요 ㅠㅠ
2010.03.30 17:38:26 (*.189.163.250)
ENII
call by value 지만 그 value라는게 사실은 주소값이기 때문에, 주소값을 통해 배열의 원소를 건드리면 실제 데이타가 변경됩니다.
2010.03.30 18:22:08 (*.76.115.36)
bard
텨텨//
void changeIt(int* pVal) {
pVal = 10;
}
여기서.. changeIt 을 호출 한 곳에서 넘겨준 값이 10으로 바뀐다면 그게 call by reference 입니다. 물론 여기서는 안바뀌지요?
pVal의 값은 원래 호출 한 곳에서 복사해 준 주소값일 뿐입니다. 그 값을 10이라는 다른 값으로 바꿨다고 한들 부른놈에게는 아무런 영향을
줄 수 없지요.
그런데
*pVal = 10;
이라고 한다면, pVal 이 가리키는 주소의 값을 10으로 바꿉니다. 이로서 호출 한놈에게도 변화가 갔습니다. (물론 pVal 에게 넘겨준 주소값
자체가 변한건 아닙니다)
이런식으로 주소를 넘김으로써 call by reference 를 구현하는 것이 C의 방식이고, 참조연산자(&)를 사용하는 것이 C++의 방식인게지요..