call by value : 함수의 인수값으로 값으로만 넘겨 함수에서 복제되어 사용되나 원래의 변수 값에는 영향이 없다.
call by reference : 인수로 주소지를 넘겨 넘어가는 주소지의 값 자체를 바꿀 수 있다.
참고) 배열은 복사 할 수 없다. 배열 자체가 포인터 이므로 call by reference 형태로 개발되어야 한다.
//각 값을 뒤 바꾸는 함수
void swap_call_by_value (int a, int b) {
//넘어온 인수의 값은 a,b로 복사된다.
int c;
c = a;
a = b;
b = c;
}
//각 값을 뒤 바꾸는 함수
void swap_call_by_reference (int *a, int *b) {
//넘어온 주소지의 값 자체를 변경하기 때문에 원본의 값도 바뀐다.
int c;
c = *a;
*a = *b;
*b = c;
}
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int i, j;
i = 1;
j = 2;
//call by value
//함수 안에서만 값이 사용되고 리턴 되입되지 않아 원본의 값에는 영향을 미치지 않는다.
swap_call_by_value(i, j);
printf("%d , %d \n", i, j);
////////////////////////////////////// 초기화
i = 1;
j = 2;
//call by reference
//실제 넘어가는 변수의 주소지가 넘어가고 가공되므로 원본의 변수값도 수정된다.
swap_call_by_reference(&i, &j);
printf("%d , %d \n", i, j);
[pool drain];
return 0;
}