Objective C/C언어 기능2010. 7. 18. 12:48



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;

}

Posted by 버터백통