Forskjellen mellom Call by Value og Call by Reference

Nøkkelforskjell mellom Call by Value og Call by Reference

  • I Call by value-metoden endres ikke den opprinnelige verdien, mens den opprinnelige verdien endres i Call by reference-metoden.
  • I Call by value sendes en kopi av variabelen, mens i Call by reference sendes en variabel i seg selv.
  • I Call by value vil faktiske og formelle argumenter bli opprettet på forskjellige minneplasseringer, mens i Call by reference vil faktiske og formelle argumenter bli opprettet på samme minneplassering.
  • Call by value er standardmetoden i programmeringsspråk som C++, PHP, Visual Basic NET og C#, mens Call by reference kun støttes i Java Språk.
  • Call by Value-variabler sendes ved hjelp av en enkel metode, mens Call by Reference-pekere kreves for å lagre adressen til variabler.

Forskjellen mellom Call by Value og Call by Reference

I programmeringsspråk kan funksjoner påkalles på to måter: som er kjent som Call by Value og Call by Reference.

Hva er Call by Value-metoden?

Call by value-metoden kopierer verdien av et argument inn i den formelle parameteren til den funksjonen. Derfor påvirker ikke endringer i parameteren til hovedfunksjonen argumentet.

I denne parameteroverføringsmetoden kopieres verdiene til faktiske parametere til funksjonens formelle parametere, og parameterne lagres på forskjellige minneplasseringer. Så eventuelle endringer som er gjort inne i funksjoner, gjenspeiles ikke i faktiske parametere til den som ringer.

Hva er Call by Reference-metoden?

Call by reference-metoden kopierer adressen til et argument inn i den formelle parameteren. I denne metoden brukes adressen for å få tilgang til det faktiske argumentet som brukes i funksjonskallet. Det betyr at endringer gjort i parameteren endrer bestått argument.

I denne metoden er minneallokeringen den samme som de faktiske parameterne. All operasjon i funksjonen utføres på verdien som er lagret på adressen til den faktiske parameteren, og den endrede verdien vil bli lagret på 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;
        }

Utgang:

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

Fordi variabel deklarert 'a'in main() er forskjellig fra variabel 'x' i inkrement(). I dette programmet er bare variabelnavn like, men minneadressen deres er forskjellig og lagret på forskjellige minneplasseringer.

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

Utgang:

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

Fordi variabel deklarert 'a' i refererer/peker til variabel 'a' i main(). Her er variabelnavnet forskjellig, men begge peker/refererer til samme minneadresseplasseringer.

Ring etter verdi vs. Ring etter referanse

Parametre Ring etter verdi Ring ved referanse
Definisjon Når du kaller en funksjon, når du sender verdier ved å kopiere variabler, er den kjent som "Call By Values." Mens du kaller en funksjon, i programmeringsspråk i stedet for å kopiere verdiene til variabler, brukes adressen til variablene, den er kjent som "Call By References.
argumenter I denne metoden sendes en kopi av variabelen. I denne metoden sendes en variabel i seg selv.
Effekt Endringer gjort i en kopi av variabel endrer aldri verdien til variabel utenfor funksjonen. Endring i variabelen påvirker også verdien av variabelen utenfor funksjonen.
Endring av verdi Tillater deg ikke å gjøre noen endringer i de faktiske variablene. Lar deg gjøre endringer i verdiene til variabler ved å bruke funksjonskall.
Passering av variabel Verdier av variabler sendes ved hjelp av en enkel metode. Pekervariabler kreves for å lagre adressen til variabler.
Verdimodifisering Opprinnelig verdi ikke endret. Den opprinnelige verdien er endret.
Minneplassering Faktiske og formelle argumenter
vil bli opprettet i forskjellige
minneplassering
Faktiske og formelle argumenter
vil bli opprettet i samme
minneplassering
Sikkerhet Faktiske argumenter gjenstår
trygge da de ikke kan endres
ved et uhell.
Faktiske argumenter er det ikke
Sikker. Det kan de være
modifisert ved et uhell, så du må håndtere argumentoperasjoner nøye.
Misligholde Standard i mange programmeringer
språk som C++.PHP. Visual Basic NET og C#.
Det støttes av de fleste
programmeringsspråk som JAVA, men
ikke som standard.

Fordeler med å bruke Call by value-metoden i C

Fordeler/fordeler med en samtale etter verdi i C:

  • Metoden endrer ikke den opprinnelige variabelen, så den bevarer data.
  • Når en funksjon kalles den, må du aldri påvirke det faktiske innholdet i de faktiske argumentene.
  • Verdien av faktiske argumenter som overføres til de formelle argumentene, så eventuelle endringer som gjøres i det formelle argumentet påvirker ikke de virkelige tilfellene.

Fordeler med å bruke Call by reference-metoden

Fordeler med å bruke call by reference-metoden:

  • Funksjonen kan endre verdien av argumentet, noe som er ganske nyttig.
  • Det oppretter ikke dupliserte data for å holde bare én verdi som hjelper deg å spare minneplass.
  • I denne metoden er det ingen kopi av argumentet. Derfor behandles det veldig raskt.
  • Hjelper deg å unngå endringer gjort ved en feil
  • En person som leser koden vet aldri at verdien kan endres i funksjonen.

Ulemper ved å bruke Call by value-metoden

Her er de store ulempene med en call by value-metode:

  • Endringer i faktiske parametere kan også endre tilsvarende argumentvariabler
  • I denne metoden må argumenter være variabler.
  • Du kan ikke endre en variabel direkte i en funksjonskropp.
  • Noen ganger kan argument være komplekse uttrykk
  • Det er laget to kopier for den samme variabelen som ikke er minneeffektiv.

Ulemper ved å bruke Call by reference-metoden

Her er de viktigste ulempene ved å bruke call by reference-metoden:

  • Sterk ikke-nullgaranti. En funksjon som tar inn en referanse må sørge for at inngangen ikke er null. Det er derfor ikke nødvendig å foreta nullsjekk.
  • Passering ved referanse gjør at funksjonen ikke er rent teoretisk.
  • En livstidsgaranti er et stort problem med referanser. Dette er spesielt farlig når du arbeider med lambdaer og flertrådede programmer.