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.

Diferența dintre Apel după valoare și Apel după referință

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