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.
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.