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