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

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

  • Call by value 방식에서는 원래 값이 수정되지 않는 반면, Call by reference 방식에서는 원래 값이 수정됩니다.
  • 값에 의한 호출에서는 변수의 복사본이 전달되는 반면, 참조에 의한 호출에서는 변수 자체가 전달됩니다.
  • 값에 의한 호출에서는 실제 인수와 형식 인수가 서로 다른 메모리 위치에 생성되는 반면 참조에 의한 호출에서는 실제 인수와 형식 인수가 동일한 메모리 위치에 생성됩니다.
  • 값에 의한 호출은 다음과 같은 프로그래밍 언어의 기본 방법입니다. C++, PHP, Visual Basic NET 및 C#인 반면 참조에 의한 호출은 다음에서만 지원됩니다. Java 언어.
  • 값에 의한 호출 변수는 간단한 방법을 사용하여 전달되는 반면 참조에 의한 호출 포인터는 변수의 주소를 저장하는 데 필요합니다.

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

프로그래밍 언어에서 함수는 두 가지 방법으로 호출될 수 있습니다. 이는 값에 의한 호출과 참조에 의한 호출로 알려져 있습니다.

Call by Value 방식이란 무엇입니까?

값별 호출 방법은 인수 값을 해당 함수의 형식 매개변수에 복사합니다. 따라서 주 함수의 매개변수에 대한 변경 사항은 인수에 영향을 주지 않습니다.

이 매개변수 전달 방법에서는 실제 매개변수의 값이 함수의 형식 매개변수에 복사되고 매개변수는 서로 다른 메모리 위치에 저장됩니다. 따라서 함수 내부에서 변경된 내용은 호출자의 실제 매개변수에 반영되지 않습니다.

Call by Reference 방식이란 무엇입니까?

참조에 의한 호출 방법은 인수의 주소를 형식 매개변수에 복사합니다. 이 메서드에서 주소는 함수 호출에 사용된 실제 인수에 액세스하는 데 사용됩니다. 이는 매개변수의 변경사항이 전달 인수를 변경함을 의미합니다.

이 방법에서 메모리 할당은 실제 매개변수와 동일합니다. 함수의 모든 작업은 실제 매개변수의 주소에 저장된 값에서 수행되고 수정된 값은 동일한 주소에 저장됩니다.

Call by Value 메서드의 C 코드 예

void main() {
        int a = 10,
        void increment(int);
        Cout << "before function calling" << a;
        increment(a);
        Cout << "after function calling" << a;
        getch();

        void increment(int x) {
            int x = x + 1;
            Cout << "value is" << x;
        }

출력:

before function calling 10
value is 11
after function calling 1-0

왜냐하면 main()에서 'a'로 선언된 변수는 increment()에서 'x'로 선언된 변수와 다르기 때문입니다. 이 프로그램에서는 변수 이름만 유사하지만 메모리 주소가 다르며 다른 메모리 위치에 저장됩니다.

Java 참조에 의한 호출 방법의 코드 예

Public static void main(string args[]) {
    int a = 10;
    System.out.println("Before call Value of a = ", a);
    Void increment();
    System.out.println("After call Value of a = ", a);
}

Void increment(int x) {
    int x = x + 1;
}

출력:

Before call Value of a =10
After call Value of a =11

에 'a'로 선언된 변수가 main()의 'a' 변수를 참조/가리키고 있기 때문입니다. 여기서 변수 이름은 다르지만 둘 다 동일한 메모리 주소 위치를 가리키거나 참조합니다.

값에 의한 호출 vs. 참조에 의한 호출

파라미터 가치로 부르기 참조로 전화
정의 함수를 호출하는 동안 변수를 복사하여 값을 전달하는 것을 "값에 의한 호출"이라고 합니다. 함수를 호출할 때 프로그래밍 언어에서는 변수 값을 복사하는 대신 변수의 주소를 사용하는 것을 "참조에 의한 호출"이라고 합니다.
인수 이 메서드에서는 변수의 복사본이 전달됩니다. 이 메서드에서는 변수 자체가 전달됩니다.
효과 변수 복사본의 변경 사항은 함수 외부의 변수 값을 수정하지 않습니다. 변수의 변경은 함수 외부의 변수 값에도 영향을 미칩니다.
가치의 변화 실제 변수를 변경할 수 없습니다. 함수 호출을 사용하여 변수 값을 변경할 수 있습니다.
변수 전달 변수 값은 간단한 방법을 사용하여 전달됩니다. 변수의 주소를 저장하려면 포인터 변수가 필요합니다.
값 수정 원래 값은 수정되지 않았습니다. 원래 값이 수정됩니다.
메모리 위치 실제 및 형식적 주장
다른 형태로 생성될 것입니다.
메모리 위치
실제 및 형식적 주장
동일하게 생성됩니다
메모리 위치
안전 실제 주장은 남아
수정이 불가능하므로 안전합니다
우연히.
실제 주장은 그렇지 않습니다.
안전한. 그들은 할 수있다
실수로 수정될 수 있으므로 인수 작업을 조심스럽게 처리해야 합니다.
태만 많은 프로그래밍의 기본값
같은 언어 C++.PHP. Visual Basic NET 및 C#.
대부분의 기업에서 지원됩니다.
JAVA와 같은 프로그래밍 언어이지만
기본값이 아닙니다.

C에서 값별 호출 방법을 사용할 때의 장점

C에서 값에 의한 호출의 장점/이점:

  • 이 메서드는 원래 변수를 변경하지 않으므로 데이터가 보존됩니다.
  • 함수가 호출될 때마다 실제 인수의 실제 내용에 영향을 주지 마십시오.
  • 형식 인수에 전달된 실제 인수의 값이므로 형식 인수의 변경 사항은 실제 사례에 영향을 주지 않습니다.

참조에 의한 호출 방법의 장점

참조 방식에 의한 호출 사용의 장점:

  • 이 함수는 인수의 값을 변경할 수 있는데 이는 매우 유용합니다.
  • 하나의 값만 보유하기 위해 중복 데이터를 생성하지 않으므로 메모리 공간을 절약하는 데 도움이 됩니다.
  • 이 방법에서는 작성된 인수의 복사본이 없습니다. 따라서 매우 빠르게 처리됩니다.
  • 실수로 인한 변경을 방지하는 데 도움이 됩니다.
  • 코드를 읽는 사람은 함수에서 값이 수정될 수 있다는 사실을 결코 알지 못합니다.

값별 호출 방법 사용의 단점

다음은 값별 호출 방법의 주요 단점/단점입니다.

  • 실제 매개변수를 변경하면 해당 인수 변수도 수정할 수 있습니다.
  • 이 메서드에서는 인수가 변수여야 합니다.
  • 함수 본문의 변수를 직접 변경할 수는 없습니다.
  • 때때로 논쟁은 복잡한 표현이 될 수 있습니다.
  • 메모리 효율적이지 않은 동일한 변수에 대해 두 개의 복사본이 생성되었습니다.

참조 방식으로 호출 사용의 단점

다음은 참조별 호출 방법을 사용할 때의 주요 단점입니다.

  • 강력한 non-null 보장. 참조를 받는 함수는 입력이 non-null인지 확인해야 합니다. 따라서 null 검사를 할 필요가 없습니다.
  • 참조로 전달하면 이론적으로 함수가 순수하지 않게 됩니다.
  • 평생 보증은 레퍼런스에서 큰 문제입니다. 이는 람다 및 다중 스레드 프로그램으로 작업할 때 특히 위험합니다.