1. call by value
   쉽게 말해서 값에 의한 전달입니다.
   흔히 함수의 반환 값이나 함수 전달 인자로 값을 넘겨 줍니다.
   단순히 값만 복사되어서 해당 함수로 넘어갑니다.
   작은 값이라면 상관없지만, 큰 정보를 넘길 경우 오버헤드가 발생할 수 있습니다.

   ex)  swap_value(int a, int b)
         {
               int temp = a;
               a = b;
               b = temp;
         }

         호출자에게는 전혀 영향을 미치지 않고 호출 당한 함수 내에서만 유효.

2. call by pointer(address)
   포인터에 의한 전달, 주소에 의한 전달입니다.
   즉, 해당 함수나 변수의 주소를 이용해서 전달하는 방식입니다.
   값을 복사하지 않기 때문에 오버헤드는 적지만, 포인터를 사용하기가 좀 까다롭다는 단점이 ㅇㅆ습니다.

   ex) swap_address(int *a, int *b)
        {
             int *temp = &a;
             a = &b;
             b = &temp;
         }


3. call by reference
   레퍼런스에 의한 전달. 참조에 의한 전달이라고 합니다.
   즉 참조를 사용하기 때문에 포인터 방식보다 간편하고 쉽습니다.
   단, 값전달 방식과 구분이 모호하다는 단점이 있습니다.

   ex) swap_ref(int &a, int &b)
        {
            int temp = a;
            a = b;
            b = temp;
         }


좀 정리를 하자면,
인자로 념겨받은 뒤 그 함수 내에서 끝나고 값을 넘겨준 함수에서의 값에 영향을 미치지 못한다면
그것은 call by value이며 그렇지 않은 경우는 call by reference입니다.

'IT > 알고리즘' 카테고리의 다른 글

피보나치 수열  (2) 2008.07.08
문자열을 뒤집는 프로그램  (0) 2008.07.08
C 프로그램에서 데이터형  (0) 2008.07.08
프로세스의 메모리 구조  (4) 2008.07.08
기억류 auto, register, static, extern에 대한 설명.  (0) 2008.07.08
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,