Różnica między wywołaniem według wartości a wywołaniem według referencji

Kluczowa różnica między połączeniem według wartości a połączeniem według odniesienia

  • W metodzie Call by value pierwotna wartość nie jest modyfikowana, natomiast w metodzie Call by reference modyfikuje się pierwotną wartość.
  • W Call by value przekazywana jest kopia zmiennej, podczas gdy w Call by reference przekazywana jest sama zmienna.
  • W trybie Call by value argumenty rzeczywiste i formalne zostaną utworzone w różnych lokalizacjach pamięci, podczas gdy w Call by reference argumenty rzeczywiste i formalne zostaną utworzone w tej samej lokalizacji pamięci.
  • Wywołanie według wartości jest metodą domyślną w językach programowania, takich jak C++, PHP, Visual Basic NET i C#, natomiast wywołanie przez referencję jest obsługiwane tylko w Java język.
  • Zmienne Call by Value przekazywane są przy użyciu prostej metody, podczas gdy wskaźniki Call by Reference są wymagane do przechowywania adresu zmiennych.

Różnica między wywołaniem według wartości a wywołaniem według referencji

W językach programowania funkcje można wywoływać na dwa sposoby: wywołanie przez wartość i wywołanie przez odwołanie.

Co to jest metoda Call by Value?

Metoda wywołania przez wartość kopiuje wartość argumentu do parametru formalnego tej funkcji. Dlatego zmiany dokonane w parametrze funkcji głównej nie mają wpływu na argument.

W tej metodzie przekazywania parametrów wartości aktualnych parametrów są kopiowane do parametrów formalnych funkcji, a parametry są przechowywane w różnych lokalizacjach pamięci. Zatem wszelkie zmiany dokonane wewnątrz funkcji nie mają odzwierciedlenia w rzeczywistych parametrach wywołującego.

Co to jest metoda Call by Reference?

Metoda wywołania przez referencję kopiuje adres argumentu do parametru formalnego. W tej metodzie adres służy do uzyskania dostępu do rzeczywistego argumentu użytego w wywołaniu funkcji. Oznacza to, że zmiany dokonane w parametrze zmieniają przekazywany argument.

W tej metodzie przydział pamięci jest taki sam jak rzeczywistych parametrów. Wszystkie operacje w funkcji są wykonywane na wartości przechowywanej pod adresem rzeczywistego parametru, a zmodyfikowana wartość będzie przechowywana pod tym samym adresem.

Kod C Przykład wywołania metody Call by Value

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;
        }

Wyjście:

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

Ponieważ zmienna zadeklarowana jako „a” w funkcji main() różni się od zmiennej „x” w funkcji inkrementacji (). W tym programie tylko nazwy zmiennych są podobne, ale ich adresy pamięci są różne i przechowywane w różnych lokalizacjach pamięci.

Java Kod Przykładowy sposób wywołania przez referencję

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;
}

Wyjście:

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

Ponieważ zmienna zadeklarowana jako „a” odwołuje się/wskazuje na zmienną „a” w funkcji main(). Tutaj nazwa zmiennej jest inna, ale obie wskazują/odwołują się do tych samych lokalizacji adresów pamięci.

Wywołanie według wartości a wywołanie przez odniesienie

parametry Zadzwoń według wartości Zadzwoń przez odniesienie
Definicja Kiedy podczas wywoływania funkcji przekazujesz wartości poprzez kopiowanie zmiennych, nazywa się to „wywoływaniem według wartości”. Podczas wywoływania funkcji w języku programowania zamiast kopiowania wartości zmiennych używany jest adres zmiennych, co jest znane jako „Call By References”.
Argumenty W tej metodzie przekazywana jest kopia zmiennej. W tej metodzie przekazywana jest sama zmienna.
Efekt Zmiany dokonane w kopii zmiennej nigdy nie modyfikują wartości zmiennej poza funkcją. Zmiana zmiennej wpływa także na wartość zmiennej poza funkcją.
Zmiana wartości Nie pozwala na dokonanie jakichkolwiek zmian w zmiennych rzeczywistych. Umożliwia dokonanie zmian w wartościach zmiennych przy pomocy wywołań funkcji.
Przekazywanie zmiennej Wartości zmiennych są przekazywane przy użyciu prostej metody. Zmienne wskaźnikowe są wymagane do przechowywania adresu zmiennych.
Modyfikacja wartości Oryginalna wartość nie została zmodyfikowana. Oryginalna wartość została zmodyfikowana.
Lokalizacja pamięci Argumenty rzeczowe i formalne
zostaną utworzone w inny sposób
lokalizacja pamięci
Argumenty rzeczowe i formalne
zostaną utworzone w tym samym
lokalizacja pamięci
Bezpieczeństwo Rzeczywiste argumenty pozostają
bezpieczne, ponieważ nie można ich modyfikować
przypadkowo.
Rzeczywiste argumenty takie nie są
Bezpieczna. Oni mogą być
przypadkowo zmodyfikowane, dlatego należy ostrożnie obchodzić się z operacjami argumentowymi.
Domyślnie Domyślne w wielu programach
języki jak C++.PHP. Visual Basic NET i C#.
Jest popierany przez większość
języków programowania, takich jak JAVA, ale
nie jako domyślny.

Zalety stosowania metody Call by value w C

Plusy/korzyści połączenia według wartości w C:

  • Metoda nie zmienia oryginalnej zmiennej, więc zachowuje dane.
  • Ilekroć wywoływana jest funkcja, nigdy nie wpływaj na rzeczywistą zawartość rzeczywistych argumentów.
  • Wartość argumentów rzeczywistych przekazywana argumentom formalnym, więc wszelkie zmiany dokonane w argumencie formalnym nie mają wpływu na przypadki rzeczywiste.

Zalety korzystania z metody Call by reference

Zalety korzystania z metody wywołania przez referencję:

  • Funkcja może zmienić wartość argumentu, co jest całkiem przydatne.
  • Nie tworzy duplikatów danych do przechowywania tylko jednej wartości, co pomaga zaoszczędzić miejsce w pamięci.
  • W tej metodzie nie ma kopii wykonanego argumentu. Dlatego jest przetwarzany bardzo szybko.
  • Pomaga uniknąć zmian dokonanych przez pomyłkę
  • Osoba czytająca kod nigdy nie wie, że wartość można modyfikować w funkcji.

Wady stosowania metody Call by value

Oto główne wady/wady metody wywołania według wartości:

  • Zmiany rzeczywistych parametrów mogą również modyfikować odpowiednie zmienne argumentów
  • W tej metodzie argumenty muszą być zmiennymi.
  • Nie można bezpośrednio zmienić zmiennej w treści funkcji.
  • Czasami argument może być złożonym wyrażeniem
  • Istnieją dwie kopie utworzone dla tej samej zmiennej, która nie oszczędza pamięci.

Wady korzystania z metody Call by reference

Oto główne wady korzystania z metody wywołania przez referencję:

  • Silna gwarancja non-null. Funkcja przyjmująca referencję musi upewnić się, że dane wejściowe są nie-null. Dlatego nie trzeba przeprowadzać kontroli null.
  • Przekazywanie przez referencję sprawia, że ​​funkcja nie jest czysta teoretycznie.
  • Dożywotnia gwarancja to duży problem w przypadku referencji. Jest to szczególnie niebezpieczne podczas pracy z lambdami i programami wielowątkowymi.