Diferența dintre Apel după valoare și Apel după referință
Diferența cheie între Apel după valoare și Apel după referință
- În metoda Apel după valoare valoarea inițială nu este modificată, în timp ce în metoda Apel prin referință, valoarea inițială este modificată.
- În Call by value, este transmisă o copie a variabilei, în timp ce în Call by reference, o variabilă în sine este transmisă.
- În Call by value, argumentele reale și formale vor fi create în locații de memorie diferite, în timp ce în Call by reference, argumentele reale și formale vor fi create în aceeași locație de memorie.
- Apelul după valoare este metoda implicită în limbaje de programare precum C++, PHP, Visual Basic NET și C#, în timp ce Apelul prin referință este acceptat numai în Java limba.
- Variabilele Apel după valoare sunt transmise folosind o metodă simplă, în timp ce pointerii Apel cu referință sunt necesari pentru a stoca adresa variabilelor.
În limbajele de programare, funcțiile pot fi invocate în două moduri: care este cunoscut sub numele de Apel după valoare și Apel prin referință.
Ce este metoda Call by Value?
Metoda apel după valoare copiază valoarea unui argument în parametrul formal al acelei funcții. Prin urmare, modificările aduse parametrului funcției principale nu afectează argumentul.
În această metodă de trecere a parametrilor, valorile parametrilor actuali sunt copiate în parametrii formali ai funcției, iar parametrii sunt stocați în diferite locații de memorie. Deci, orice modificări făcute în interiorul funcțiilor nu sunt reflectate în parametrii actuali ai apelantului.
Ce este metoda de apel prin referință?
Metoda apel prin referință copiază adresa unui argument în parametrul formal. În această metodă, adresa este utilizată pentru a accesa argumentul real utilizat în apelul funcției. Înseamnă că modificările făcute în parametru modifică argumentul care trece.
În această metodă, alocarea memoriei este aceeași cu parametrii actuali. Toate operațiunile din funcție sunt efectuate pe valoarea stocată la adresa parametrului actual, iar valoarea modificată va fi stocată la aceeași adresă.
C Exemplu de cod al unei metode 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; }
ieșire:
before function calling 10 value is 11 after function calling 1-0
Deoarece variabila declarată „a” în main() este diferită de variabila „x” în increment(). În acest program, numai numele variabilelor sunt similare, dar adresa lor de memorie este diferită și este stocată în locații de memorie diferite.
Java Exemplu de cod al unei metode de apel prin referință
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; }
ieșire:
Before call Value of a =10 After call Value of a =11
Deoarece variabila declarată „a” în se referă/indică la variabila „a” în main(). Aici numele variabilei este diferit, dar ambele indică/se referă la aceleași locații de adresă de memorie.
Apel după valoare vs. Apel după referință
parametrii | Apelați după valoare | Apelați prin referință |
---|---|---|
Definiție | În timp ce apelați o funcție, când transmiteți valori prin copierea variabilelor, aceasta este cunoscută sub numele de „Apel după valori”. | În timpul apelării unei funcții, în limbajul de programare, în loc de a copia valorile variabilelor, se folosește adresa variabilelor, cunoscută sub numele de „Call By References”. |
Argumente | În această metodă, se transmite o copie a variabilei. | În această metodă, o variabilă în sine este trecută. |
Efect | Modificările efectuate într-o copie a variabilei nu modifică niciodată valoarea variabilei în afara funcției. | Modificarea variabilei afectează și valoarea variabilei în afara funcției. |
Modificarea valorii | Nu vă permite să faceți nicio modificare în variabilele reale. | Vă permite să faceți modificări în valorile variabilelor folosind apeluri de funcții. |
Trecerea variabilei | Valorile variabilelor sunt transmise folosind o metodă simplă. | Variabilele pointer sunt necesare pentru a stoca adresa variabilelor. |
Modificarea valorii | Valoarea inițială nu a fost modificată. | Se modifică valoarea inițială. |
Locația memoriei | Argumente reale și formale vor fi create în diferite locația de memorie |
Argumente reale și formale va fi creat în același locația de memorie |
Siguranţă | Argumentele reale rămân sigure deoarece nu pot fi modificate accidental. |
Argumentele reale nu sunt Sigur. Ei pot fi modificat accidental, așa că trebuie să gestionați cu atenție operațiunile cu argumente. |
Mod implicit | Implicit în multe programe limbi precum C++.PHP. Visual Basic NET și C#. |
Este susținut de majoritatea limbaje de programare precum JAVA, dar nu ca implicit. |
Avantajele utilizării metodei Call by value în C
Avantaje/beneficii ale unui apel după valoare în C:
- Metoda nu modifică variabila originală, deci păstrează datele.
- Ori de câte ori o funcție este numită, nu afectați niciodată conținutul real al argumentelor reale.
- Valoarea argumentelor reale trecute la argumentele formale, astfel încât orice modificări aduse argumentului formal nu afectează cazurile reale.
Avantajele utilizării metodei Apel prin referință
Avantajele utilizării metodei apel prin referință:
- Funcția poate schimba valoarea argumentului, ceea ce este destul de util.
- Nu creează date duplicat pentru păstrarea unei singure valori, ceea ce vă ajută să economisiți spațiu de memorie.
- În această metodă, nu există o copie a argumentului făcut. Prin urmare, este procesat foarte rapid.
- Vă ajută să evitați modificările făcute din greșeală
- O persoană care citește codul nu știe niciodată că valoarea poate fi modificată în funcție.
Dezavantajele utilizării metodei Call by value
Iată dezavantajele/dezavantajele majore ale unei metode de apel după valoare:
- Modificările parametrilor actuali pot modifica și variabilele argument corespunzătoare
- În această metodă, argumentele trebuie să fie variabile.
- Nu puteți modifica direct o variabilă dintr-un corp de funcție.
- Uneori, argumentul poate fi expresii complexe
- Există două copii create pentru aceeași variabilă care nu este eficientă în memorie.
Dezavantajele utilizării metodei Apel prin referință
Iată dezavantajele majore ale utilizării metodei apel prin referință:
- Garanție puternică non-nulă. O funcție care preia o referință trebuie să se asigure că intrarea nu este nulă. Prin urmare, nu este necesară verificarea nulă.
- Trecerea prin referință face ca funcția să nu fie pură teoretic.
- O garanție pe viață este o mare problemă cu referințele. Acest lucru este periculos în special atunci când lucrați cu programe lambda și cu mai multe fire.