C ++ Call By Address och Call By Reference

C Call Address



C ++ är ett flexibelt programmeringsspråk för allmänna ändamål. Det skapades ursprungligen av Bjarne Stroustrup, en dansk datavetare, redan 1985. C ++ stöder treparameterpassningsmetoder, dvs samtal efter värde, samtal efter adress och samtal genom referens. I den här artikeln kommer vi att diskutera om samtal efter adress och samtal efter referensmekanism.

Vad är en funktion?

Innan vi hoppar in i själva ämnet måste vi förstå vad funktionen är i C ++. Många av er kanske redan känner till funktioner.







En funktion är i grunden en kodbit som kan användas för att utföra en viss uppgift. En funktion används huvudsakligen för att minska den repetitiva koden i ett C ++ - program. Den tar inmatning som parametrar och returnerar utmatningen som ett returvärde. Om vi ​​definierar funktionen en gång kan vi ringa/använda den flera gånger i den senare delen av vårt program. På så sätt sparar vi mycket repetitiv kod i programmet.



Varje C ++ - program ska ha huvudfunktionen (). Huvudfunktionen () är startpunkten för ett C ++ - program. Förutom huvudfunktionen () kan programmeraren definiera så många funktioner som de vill.



Här är syntaxen för att definiera en funktion:





Return_type Function_Name(Inmatningsparameterlista)

Funktion i C ++ kan acceptera 0 eller fler antal ingångsparametrar, medan den bara kan returnera ett returvärde.

Vad är adress?

Det finns två typer av variabler i C ++ (liknande C -språk) - datavariabel och adressvariabel. Adressvariabeln används för att lagra adressen till en annan datavariabel. Låt oss till exempel överväga följande kodavsnitt:



inti= 100;
int *ptr= &i;

Här berättar den första satsen att variabeln i är en datavariabel, och den lagrar värdet 100. I den andra satsen deklarerar vi en pekarvariabel, dvs ptr, och initierar den med adressen till variabeln i.

Vad är referens?

Referensen är en annan kraftfull funktion i språket C ++. Låt oss överväga följande kodavsnitt:

inttill= 200;
int &r=till;

I det här exemplet har vi deklarerat ett heltal, dvs a och sedan deklarerat en referensvariabel vari r, som initialiseras med värdet a. Så referensvariabeln är inget annat än ett alias för en annan variabel.

Parameterpassningsmetoder:

Det finns tre typer av parameteröverföringsmetoder i C ++ -språk:

  1. Ring efter värde / Passera efter värde
  2. Ring efter adress / Passera adress
  3. Ring med referens / Passera genom referens

I den här artikeln diskuterar vi om - Ring efter adress och Ring efter referens.

Vad är Call By Address / Pass by address?

När det gäller metoden Call by address / Pass by address skickas funktionsargumenten som adress. Uppringningsfunktionen skickar adressen till parametrarna. Pekarvariabler används i funktionsdefinitionen. Med hjälp av Call by address -metoden kan funktionen komma åt de faktiska parametrarna och ändra dem. Vi kommer att se ett exempel på metoden Ring efter adress senare avsnitt i denna artikel.

Vad är Call By Reference / Pass by reference?

I metoden Call by reference / Pass by reference skickas funktionsparametrarna som en referens. Inne i funktionsdefinitionen nås de faktiska parametrarna med hjälp av referensvariabeln.

Exempel:

Nu, eftersom vi förstår begreppet parameteröverföringsmetoder, kommer vi att se flera exempelprogram för att förstå parameteröverföringsmekanismen i C ++:

  1. Exempel-1-Ring efter adress (1)
  2. Exempel-2-Ring efter adress (2)
  3. Exempel-3-Ring efter referens (1)
  4. Exempel-4-Ring efter referens (2)

De två första exemplen ges för att förklara hur Call by address -metoden fungerar i C ++. De två sista exemplen är att förklara Call by reference -konceptet.

Exempel-1-Ring efter adress (1)

I det här exemplet kommer vi att demonstrera call by address -mekanismen. Från huvudfunktionen () kallar vi funktionen hej () och skickar adressen till var. I funktionsdefinitionen tar vi emot adressen var i en pekarvariabel, dvs p. Inuti funktionen hej ändras värdet på var till 200 med hjälp av pekaren. Därför ändras värdet på var till 200 inuti huvudfunktionen () efter funktionssamtalet hej ().

#omfatta
använder sig av namnrymdtimmar;

tomhetHej(int *sid)
{
kosta <<endl<< 'Inside hello () -funktion:' <<endl;
kosta << 'Värde på *p =' << *sid<<endl;
*sid= 200;
kosta << 'Värde på *p =' << *sid<<endl;
kosta << 'Avslutar hej () -funktionen.' <<endl;
}

inthuvud()
{
intvar= 100;
kosta << 'Value of var inside main () function =' <<var<<endl;

Hej(&var);

kosta <<endl<< 'Value of var inside main () function =' <<var<<endl;

lämna tillbaka 0;
}

Exempel-2-Ring efter adress (2)

Detta är ett annat exempel på metoden för anrop efter adress. I det här exemplet kommer vi att förklara hur metoden call by address kan användas för att lösa ett verkligt problem. Till exempel vill vi skriva en funktion för att byta två variabler. Om vi ​​använder call by value -mekanismen för att byta två variabler, byts de faktiska variablerna inte ut i uppringarfunktionen. Anrop efter adress -metoden kan användas i ett sådant scenario. I det här exemplet skickar vi adressen till både var_1 (& var_1) och var_2 (& var_2) till funktionen mySwap (). Inuti funktionen mySwap () byter vi ut värdena för dessa två variabler med hjälp av pekarna. Som du kan se i utmatningen nedan byts det faktiska värdet för dessa variabler i huvudfunktionen () efter att funktionen mySwap () har körts.

#omfatta
använder sig av namnrymdtimmar;

tomhetmySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

inthuvud()
{
intvar_1= 100;
intvar_2= 300;

kosta << 'Innan du anropar funktionen mySwap (), värdet av var_1:' <<var_1<<endl;
kosta << 'Innan du anropar funktionen mySwap (), värdet av var_2:' <<var_2<<endl<<endl;

kosta << 'Calling mySwap () - Call by address.' <<endl<<endl;
mySwap(&var_1,&var_2);

kosta << 'Efter att ha ringt till funktionen mySwap (), värdet av var_1:' <<var_1<<endl;
kosta << 'Efter att ha ringt till funktionen mySwap (), värdet av var_2:' <<var_2<<endl;

lämna tillbaka 0;
}

Exempel-3-Ring efter referens (1)

I det här exemplet kommer vi att demonstrera hur call by reference fungerar i C ++. I funktionsdefinitionen hej () tas värdet emot som en referensvariabel (& p). Med hjälp av referensvariabeln (dvs. p) kan vi ändra värdet på den faktiska parametern (var) inuti huvudfunktionen ().

#omfatta
använder sig av namnrymdtimmar;

tomhetHej(int &sid)
{
kosta <<endl<< 'Inside hello () -funktion:' <<endl;
kosta << 'Värde p =' <<sid<<endl;
sid= 200;
kosta << 'Värde p =' <<sid<<endl;
kosta << 'Avslutar hej () -funktionen.' <<endl;
}

inthuvud()
{
intvar= 100;
kosta << 'Value of var inside main () function =' <<var<<endl;

Hej(var);

kosta <<endl<< 'Value of var inside main () function =' <<var<<endl;

lämna tillbaka 0;
}

Exempel-4-Ring efter referens (2)

Detta är ett annat exempel på ett samtal som referens. I det här exemplet kommer vi att demonstrera hur call by reference fungerar i C ++ med hjälp av ett verkligt exempel. Funktionen mySwap () anropas från huvudfunktionen () med följande parametrar - var_1 och var_2. Inuti funktionen mySwap () tar vi emot parametrarna som referensvariabler.

#omfatta
använder sig av namnrymdtimmar;

tomhetmySwap(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

inthuvud()
{
intvar_1= 100;
intvar_2= 300;

kosta << 'Innan du anropar funktionen mySwap (), värdet av var_1:' <<var_1<<endl;
kosta << 'Innan du anropar funktionen mySwap (), värdet av var_2:' <<var_2<<endl<<endl;

kosta << 'Calling mySwap () - Call by reference.' <<endl<<endl;
mySwap(var_1, var_2);

kosta << 'Efter att ha ringt till funktionen mySwap (), värdet av var_1:' <<var_1<<endl;
kosta << 'Efter att ha ringt till funktionen mySwap (), värdet av var_2:' <<var_2<<endl;

lämna tillbaka 0;
}

Slutsats

Förstå parametern som skickar in metoder C ++ är mycket avgörande. Programmeringsspråket C stöder endast Call by value och Call by address. Men C ++ stöder Call genom referens tillsammans med de två föregående mekanismerna. I den här artikeln har vi sett flera arbetsexempel för att förstå begreppet Call by address och Call by reference. Ring efter adress är en mycket kraftfull och populär metod i inbäddade domänprogram.