Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

값에 의한 호출과 참조에 의한 호출의 차이점

<시간/>

함수에 매개변수를 전달하는 것을 기반으로 하는 프로그래밍에서 함수 호출을 두 가지로 분류했습니다. 값에 의한 호출과 참조에 의한 호출. 두 호출에서 이름에서 알 수 있듯이 우리는 매개변수의 유형별로 함수를 호출하고 매개변수의 실제 값을 전달하고 있습니다. 다른 곳에서는 매개변수의 위치/참조를 전달하고 있습니다.

다음은 Call by Value와 Call by Reference의 중요한 차이점입니다.

Sr. 아니요. 값에 의한 호출 참조에 의한 호출
1 명명 규칙 이 유형에서와 같이 매개변수의 값은 함수 호출을 위해 전달되므로 값에 의한 호출로 이름이 지정됩니다. 반면에 이 유형에서는 매개변수의 참조가 함수를 호출하기 위해 전달되므로 참조에 의한 호출로 이름이 지정됩니다.
2 내부 구현 값에 의한 호출에서 함수를 호출하는 동안 전달한 매개변수의 값은 함수의 실제 로컬 인수에 복사됩니다. 참조에 의한 호출에서는 전달된 매개변수의 위치 주소/참조가 복사되어 함수의 로컬 인수에 할당되므로 전달된 매개변수와 실제 인수가 모두 동일한 위치를 참조합니다.
3 변경의 효과 전달된 매개변수의 값이 함수의 인수로 복사되기 때문에 함수 내부의 인수에서 변경된 사항이 전달된 매개변수에 반영되지 않습니다. 인수와 전달된 매개변수 모두 동일한 위치를 참조하므로 함수 내부의 인수에 대한 변경 사항은 전달된 매개변수에 반영됩니다.
4 참조 메모리 위치 전달된 매개변수와 함수의 실제 인수가 참조하는 메모리 위치가 다릅니다. 전달된 매개변수와 함수의 실제 인수가 참조하는 메모리 위치가 동일합니다.
5 지원되는 언어. 값에 의한 호출은 C++.PHP와 같은 언어에서 지원됩니다. Visual Basic NET 및 C#. 참조에 의한 호출은 주로 JAVA에서 지원됩니다.

값에 의한 호출과 참조에 의한 호출의 예

ByValue.c

#include <stdio.h>
class ByValue{
   void swapByValue(int, int); /* Prototype */
   int main(){
      int n1 = 10, n2 = 20;
      swapByValue(n1, n2);
      printf("n1: %d, n2: %d\n", n1, n2);
   }
   void swapByValue(int a, int b){
      int t;
      t = a; a = b; b = t;
   }
}

출력

n1: 10, n2: 20

예시

ByReference.c

#include <stdio.h>
class ByReference{
   void swapByReference(int*, int*);
   int main(){
      int n1 = 10, n2 = 20;
      swapByReference(&n1, &n2);
      printf("n1: %d, n2: %d\n", n1, n2);
   }
   void swapByReference(int *a, int *b){
      int t;
      t = *a; *a = *b; *b = t;
   }
}

출력

n1: 20, n2: 10