[Call by Value]
: 값에 의한 호출. 복사해 처리하므로 원래의 값이 보존됨.
[Call by Reference]
: 함수에서 값이 아닌 주솟값을 전달하는 방식. 복사하지 않고 직접 참조. 원래 값이 영향을 받음. (C언어에서는 call by address라고 함.) 값을 전부 복사할 필요가 없으므로 자원 낭비를 확실히 줄일 수 있다.
[c언어에서]
#include <stdio.h>
void swap1 (int a, int b){
int temp;
temp = a;
a = b;
b = temp;
}
void swap2 (int* a, int* b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main(){
int a, b, c, d;
a = 10;
b = 20;
c = 10;
d = 20;
printf("%d, %d, %d, %d", a, b, c, d);
swap (a, b); // 내부적으로 데이터가 처리되지만 a와 b에게 전달 X!
swap (&c, &d); // 함수 내부에서 주소를 바꿔버려서 c와 d 자체가 교체됨!
printf("%d, %d, %d, %d", a, b, c, d);
return 0;
}
[출력결과]
10, 20, 10, 20
10, 20, 20, 10