Forskjellen mellom anrop etter verdi og anrop etter referanse

Innholdsfortegnelse:

Anonim

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

I denne veiledningen vil du lære,

  • Hva er call by value-metoden?
  • Hva er Call by Reference-metoden?
  • Eksempel på en samtale etter verdimetode
  • Eksempel på en samtale med referansemetode
  • Ring etter verdi vs. Ring etter referanse
  • Fordeler med å bruke Call by value-metoden
  • Fordeler med å bruke Call by referansemetode
  • Ulemper ved å bruke Call by value-metoden
  • Ulemper ved å bruke Call by referansemetode

Hva er Call by Value-metoden?

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

I denne parameteroverføringsmetoden kopieres verdiene til faktiske parametere til funksjonens formelle parametere, og parametrene lagres på forskjellige minneplasser. Så eventuelle endringer som gjøres inne i funksjoner, reflekteres ikke i de faktiske parametrene til den som ringer.

HOVEDFORSKJELL

  • I metoden Ring etter verdi blir den opprinnelige verdien ikke endret, mens den opprinnelige verdien i Call by reference-metoden blir endret.
  • 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 opprettes på forskjellige minnesteder, mens det i Call by reference blir opprettet faktiske og formelle argumenter på samme minneplassering.
  • Call by value er standardmetoden i programmeringsspråk som C ++, PHP, Visual Basic NET og C # mens Call by reference bare støttes Java-språk.
  • Kall etter verdi, variabler sendes ved hjelp av en grei metode, mens pekere kreves for å lagre adressen til variabler.

Hva er Call by Reference-metoden?

Ring ved referansemetode kopierer adressen til et argument til den formelle parameteren. I denne metoden brukes adressen til å få tilgang til det faktiske argumentet som brukes i funksjonsanropet. Det betyr at endringer som er gjort i parameteren endrer passeringsargumentet.

I denne metoden er minnetildelingen den samme som de faktiske parametrene. All operasjonen 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.

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

Produksjon:

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

Fordi variabel erklært 'a'in main () er forskjellig fra variabel' x 'i trinn (). I dette programmet er bare variabelnavn like, men minneadressen er forskjellig og lagres på forskjellige minneplasser.

Eksempel på en samtale etter referansemetode

Public static void(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;}

Produksjon:

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

Fordi variabel erklært 'a' i refererer til / peker på variabel 'a' i hoved (). Her er variabelnavnet annerledes, men begge peker / refererer til samme minneadresseplasseringer.

Ring etter verdi vs. Ring etter referanse

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

Fordeler med å bruke Call by value-metoden

Fordeler / fordeler med en samtale etter verdimetode:

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

Fordeler med å bruke Call by referansemetode

Fordeler med å bruke samtale etter referansemetode:

  • Funksjonen kan endre verdien av argumentet, noe som er ganske nyttig.
  • Det lager ikke dupliserte data for bare å ha en verdi som hjelper deg med å spare minne.
  • I denne metoden er det ingen kopi av argumentet. Derfor behandles det veldig raskt.
  • Hjelper deg med å unngå endringer utført ved en feiltakelse
  • En person som leser koden vet aldri at verdien kan endres i funksjonen.

Ulemper ved å bruke Call by value-metoden

Her er de største ulempene / ulempene ved en samtale etter verdimetoden:

  • Endringer i faktiske parametere kan også endre korresponderende argumentvariabler
  • I denne metoden må argumenter være variabler.
  • Du kan ikke endre en variabel direkte i en funksjonsdel.
  • En eller annen argumentasjon kan være komplekse uttrykk
  • Det er to eksemplarer opprettet for den samme variabelen som ikke er minneeffektiv.

Ulemper ved å bruke Call by referansemetode

Her er de viktigste ulempene ved å bruke samtale etter referansemetode:

  • Sterk ikke-null garanti. En funksjon som tar inn et referansebehov for å sikre at inngangen ikke er null. Derfor trenger ikke nullkontroll.
  • Å passere ved referanse gjør at funksjonen ikke er ren teoretisk.
  • Livstidsgaranti er et stort problem med referanser. Dette er spesielt farlig når du arbeider med lambdas og programmer med flere tråder.