Skillnad mellan samtal efter värde och samtal med referens

Innehållsförteckning:

Anonim

I programmeringsspråk kan funktioner åberopas på två sätt: vilket kallas Call by Value och Call by Reference.

I den här handledningen lär du dig,

  • Vad är call by value-metod?
  • Vad är Call by Reference-metoden?
  • Exempel på ett samtal efter värdemetod
  • Exempel på ett samtal med referensmetod
  • Ring efter värde kontra samtal efter referens
  • Fördelar med att använda Call by value-metoden
  • Fördelar med att använda Call enligt referensmetod
  • Nackdelar med att använda Call by value-metoden
  • Nackdelar med att använda Call by reference method

Vad är Call by Value-metoden?

Metoden Call by value kopierar värdet på ett argument till den formella parametern för den funktionen. Därför påverkar inte ändringar som görs i parametern för huvudfunktionen argumentet.

I denna parameteröverföringsmetod kopieras värden för faktiska parametrar till funktionens formella parametrar och parametrarna lagras på olika minnesplatser. Så alla ändringar som görs i funktioner återspeglas inte i den som ringer upp.

NYCKELSKILL

  • I metoden Samtal efter värde ändras inte det ursprungliga värdet medan det ursprungliga värdet i Samtal med referensmetod ändras.
  • I anrop efter värde skickas en kopia av variabeln medan i anrop som referens skickas en variabel i sig.
  • I samtal efter värde kommer faktiska och formella argument att skapas på olika minnesplatser medan i samtal genom referens kommer faktiska och formella argument att skapas på samma minnesplats.
  • Samtal efter värde är standardmetoden i programmeringsspråk som C ++, PHP, Visual Basic NET och C # medan samtal med referens endast stöds Java-språk.
  • Call by Value, variabler skickas med en enkel metod medan Call by Reference, pekare krävs för att lagra variabelns adress.

Vad är Call by Reference-metoden?

Call by reference-metoden kopierar adressen till ett argument till den formella parametern. I den här metoden används adressen för att komma åt det faktiska argumentet som används i funktionsanropet. Det betyder att ändringar som gjorts i parametern ändrar passeringsargumentet.

I denna metod är minnestilldelningen densamma som de faktiska parametrarna. All operation i funktionen utförs på det värde som lagras på adressen till den aktuella parametern och det modifierade värdet kommer att lagras på samma adress.

Exempel på en Call by Value-metod

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

Produktion:

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

Eftersom variabel som deklareras som 'a'in main () skiljer sig från variabeln' x 'i steg (). I det här programmet är endast variabla namn lika, men deras minnesadress är olika och lagras på olika minnesplatser.

Exempel på ett samtal med referensmetod

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

Produktion:

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

Eftersom variabel som deklareras 'a' i refererar / pekar på variabel 'a' i main (). Här är variabelnamnet annorlunda, men båda pekar / refererar till samma minnesadressplatser.

Ring efter värde kontra samtal efter referens

Parametrar Ring efter värde Ring genom referens
Definition När du ringer till en funktion, när du skickar värden genom att kopiera variabler, kallas den "Call By Values". När du anropar en funktion, i programmeringsspråk istället för att kopiera värdena på variabler, används adressen för variablerna, den kallas "Call By References".
Argument I den här metoden skickas en kopia av variabeln. I denna metod skickas en variabel i sig.
Effekt Ändringar som görs i en kopia av variabeln ändrar aldrig värdet på variabeln utanför funktionen. Förändring i variabeln påverkar också värdet på variabeln utanför funktionen.
Ändring av värde Tillåter dig inte att göra några ändringar i de faktiska variablerna. Låter dig göra ändringar i värdena på variabler med hjälp av funktionssamtal.
Passering av variabel Värden för variabler skickas med en enkel metod. Pekvariabler krävs för att lagra adressen till variabler.
Värdeändring Originalvärdet har inte ändrats. Det ursprungliga värdet ändras.
Minnesplats Faktiska och formella argument skapas på olika minnesplatser Faktiska och formella argument skapas på samma minnesplats
Säkerhet Faktiska argument förblir säkra eftersom de inte kan ändras av misstag. Faktiska argument är inte säkra. De kan ändras av misstag, så du måste hantera argumentoperationer noggrant.
Standard Standard på många programmeringsspråk som C ++. PHP. Visual Basic NET och C #. Det stöds av de flesta programmeringsspråk som JAVA, men inte som standard.

Fördelar med att använda Call by value-metoden

Fördelar / fördelar med ett samtal efter värdemetod:

  • Metoden ändrar inte den ursprungliga variabeln, så den bevarar data.
  • När en funktion kallas det, påverkar aldrig det faktiska innehållet i de faktiska argumenten.
  • Värdet av faktiska argument som skickats till de formella argumenten, så alla ändringar som görs i det formella argumentet påverkar inte de verkliga fallen.

Fördelar med att använda Call enligt referensmetod

Fördelar med att använda samtal med referensmetod:

  • Funktionen kan ändra argumentets värde, vilket är ganska användbart.
  • Det skapar inte dubbla data för att bara hålla ett värde som hjälper dig att spara minnesutrymme.
  • I den här metoden finns det ingen kopia av argumentet. Därför bearbetas den mycket snabbt.
  • Hjälper dig att undvika ändringar som görs av misstag
  • En person som läser koden vet aldrig att värdet kan ändras i funktionen.

Nackdelar med att använda Call by value-metoden

Här är de största nackdelarna med ett samtal efter värdemetod:

  • Ändringar av faktiska parametrar kan också ändra motsvarande argumentvariabler
  • I den här metoden måste argumenten vara variabler.
  • Du kan inte direkt ändra en variabel i en funktionskropp.
  • Sometime argument kan vara komplexa uttryck
  • Det finns två kopior skapade för samma variabel som inte är minneseffektiv.

Nackdelar med att använda Call by reference method

Här är de största nackdelarna med att använda samtal med referensmetod:

  • Stark icke-noll garanti. En funktion som tar in ett referensbehov för att se till att ingången inte är null. Nollkontroll behöver därför inte göras.
  • Att skicka referens gör att funktionen inte är teoretiskt ren.
  • Livstidsgaranti är en stor fråga med referenser. Detta är särskilt farligt när man arbetar med lambdas och program med flera trådar.