Forskellen mellem Call by Value og Call by Reference

Nøgleforskel mellem Call by Value og Call by Reference

  • I Call by value-metoden ændres den oprindelige værdi ikke, hvorimod den oprindelige værdi ændres i Call by reference-metoden.
  • I Call by value sendes en kopi af variablen, mens der i Call by reference overføres en variabel i sig selv.
  • I Call by value vil faktiske og formelle argumenter blive oprettet på forskellige hukommelsesplaceringer, hvorimod i Call by reference vil faktiske og formelle argumenter blive oprettet på den samme hukommelsesplacering.
  • Kald efter værdi er standardmetoden i programmeringssprog som f.eks C++, PHP, Visual Basic NET og C#, hvorimod Call by reference kun understøttes i Java Sprog.
  • Call by Value variabler videregives ved hjælp af en ligetil metode, hvorimod Call by Reference pointere er påkrævet for at gemme adressen på variabler.

Forskellen mellem Call by Value og Call by Reference

I programmeringssprog kan funktioner aktiveres på to måder: som er kendt som Call by Value og Call by Reference.

Hvad er Call by Value-metoden?

Call by value-metoden kopierer værdien af ​​et argument ind i den formelle parameter for denne funktion. Derfor påvirker ændringer foretaget af parameteren for hovedfunktionen ikke argumentet.

I denne parameteroverførselsmetode kopieres værdier af aktuelle parametre til funktionens formelle parametre, og parametrene gemmes på forskellige hukommelsesplaceringer. Så eventuelle ændringer foretaget inde i funktioner afspejles ikke i de faktiske parametre for den, der ringer.

Hvad er Call by Reference-metoden?

Call by reference-metoden kopierer adressen på et argument til den formelle parameter. I denne metode bruges adressen til at få adgang til det faktiske argument, der bruges i funktionskaldet. Det betyder, at ændringer foretaget i parameteren ændrer det beståede argument.

I denne metode er hukommelsesallokeringen den samme som de faktiske parametre. Alle handlinger i funktionen udføres på den værdi, der er gemt på adressen for den aktuelle parameter, og den ændrede værdi vil blive gemt på den samme adresse.

C-kode Eksempel på en Call by Value-metode

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

Output:

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

Fordi variabel erklæret 'a'in main() er forskellig fra variabel 'x' i increment(). I dette program er kun variabelnavne ens, men deres hukommelsesadresse er forskellige og gemt på forskellige hukommelsesplaceringer.

Java Kodeeksempel på en Call by Reference-metode

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

Output:

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

Fordi variabel erklæret 'a' i refererer/peger til variabel 'a' i main(). Her er variabelnavnet forskelligt, men begge peger/refererer til samme hukommelsesadresseplaceringer.

Opkald efter værdi vs. Opkald efter reference

parametre Ring efter værdi Ring ved henvisning
Definition Når du kalder en funktion, når du sender værdier ved at kopiere variabler, er det kendt som "Call By Values." Mens du kalder en funktion, i programmeringssprog i stedet for at kopiere værdierne af variabler, bruges adressen på variablerne, den er kendt som "Call By References.
argumenter I denne metode sendes en kopi af variablen. I denne metode sendes en variabel i sig selv.
Effekt Ændringer foretaget i en kopi af variabel ændrer aldrig værdien af ​​variabel uden for funktionen. Ændring i variablen påvirker også værdien af ​​variablen uden for funktionen.
Ændring af værdi Tillader dig ikke at foretage ændringer i de faktiske variable. Giver dig mulighed for at foretage ændringer i værdierne af variabler ved at bruge funktionskald.
Overførsel af variabel Værdier af variable overføres ved hjælp af en ligetil metode. Pointervariabler er nødvendige for at gemme variables adresse.
Værdiændring Oprindelig værdi ikke ændret. Den oprindelige værdi er ændret.
Hukommelsesplacering Faktiske og formelle argumenter
vil blive oprettet i forskellige
hukommelsesplacering
Faktiske og formelle argumenter
vil blive oprettet i samme
hukommelsesplacering
Sikkerhed Faktiske argumenter er tilbage
sikre, da de ikke kan ændres
ved en fejltagelse.
Faktiske argumenter er det ikke
Sikker. Det kan de være
ved et uheld ændret, så du skal håndtere argumentoperationer omhyggeligt.
Standard Standard i mange programmeringer
sprog som C++.PHP. Visual Basic NET og C#.
Det understøttes af de fleste
programmeringssprog som JAVA, men
ikke som standard.

Fordele ved at bruge Call by value-metoden i C

Fordele/fordele ved et opkald efter værdi i C:

  • Metoden ændrer ikke den oprindelige variabel, så den bevarer data.
  • Når en funktion kaldes den, må du aldrig påvirke det faktiske indhold af de faktiske argumenter.
  • Værdien af ​​faktiske argumenter overført til de formelle argumenter, så eventuelle ændringer i det formelle argument påvirker ikke de reelle tilfælde.

Fordele ved at bruge Call by reference-metoden

Fordele ved at bruge call by reference-metoden:

  • Funktionen kan ændre værdien af ​​argumentet, hvilket er ret nyttigt.
  • Det opretter ikke duplikerede data for kun at holde en værdi, hvilket hjælper dig med at spare hukommelsesplads.
  • I denne metode er der ingen kopi af argumentet. Derfor behandles det meget hurtigt.
  • Hjælper dig med at undgå ændringer udført ved en fejl
  • En person, der læser koden, ved aldrig, at værdien kan ændres i funktionen.

Ulemper ved at bruge Call by value-metoden

Her er de store ulemper/ulemper ved en call by value-metode:

  • Ændringer af faktiske parametre kan også ændre tilsvarende argumentvariabler
  • I denne metode skal argumenter være variable.
  • Du kan ikke ændre en variabel direkte i en funktions krop.
  • Nogle gange kan argumenter være komplekse udtryk
  • Der er oprettet to kopier til den samme variabel, som ikke er hukommelseseffektiv.

Ulemper ved at bruge Call by reference-metoden

Her er de største ulemper ved at bruge call by reference-metoden:

  • Stærk ikke-nul garanti. En funktion, der tager en reference ind, skal sikre, at inputtet ikke er nul. Derfor skal der ikke foretages nulkontrol.
  • Beståelse ved henvisning gør, at funktionen ikke er rent teoretisk.
  • En livstidsgaranti er et stort problem med referencer. Dette er specielt farligt, når du arbejder med lambdaer og flertrådede programmer.