Search
Duplicate
💧

Call By Value, Reference

내가 사직서를 쓴다고 가정했을 때, 이미 뽑아져있는 걸 쓰느냐 아니면 똑같은 양식을 새로 뽑아 쓰느냐
Call By Value(값에 의한 호출)
똑같은 양식이지만 새로 사직서를 출력해서 쓰는 것이다.
인자로 받은 값을 복사하여 처리, 복사하여 처리하기 때문에 기존 변수의 값은 보존된다.
간접 참조를 하기 때문에 메모리 사용량이 늘어난다.
Call By Reference(참조에 의한 호출)
기존에 뽑아두었던 사직서를 가져다 쓰는 것이다.
인자로 받은 값을 값을 직접 참조, 즉 함수로 전달된 값이 변경할 경우 원본도 같이 변경된다.
직접 참조를 하기 때문에 데이터에 의도하지 않은 변경이 발생할 수 있다.
⇒ 원본값을 바꿀 필요가 있다면 reference, 없다면 value

언어별 차이

C
C언어는 Call By Value, Call By Reference 둘 다 제공한다.
1.
Call By Value
void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } int main() { int a = 10; int b = 20; sawp(a,b); }
C
복사
위 코드에서 swap 함수의 범위에서는 a, b 변수의 주소가 새로이 생성되면서 값도 변경되지만 swap 함수의 범위를 벗어나면 a, b의 값은 그대로 10, 20을 유지한다.
위 함수에서 매개변수에 값을 넘겨줄때, 그 값을 복사해 넘겨주므로 Call By Value다.
2.
Call By Reference
void swap(int &a, int &b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int a = 10; int b = 20; sawp(a,b); }
C
복사
주소값을 매개변수로 받는 Swap이 있다.
Call By Value의 코드와는 다르게 주소값을 매개변수로 넘겨주는데 이 경우, 값이 변경된다.