C ++

C ++ Ring efter adress och ring efter referens

C ++ Ring efter adress och ring efter referens

C ++ är ett flexibelt programmeringsspråk för allmänt ändamål. Det skapades ursprungligen av Bjarne Stroustrup, en dansk datavetare, redan 1985. C ++ stöder tre parametrar för överföringsmetoder, d.v.s.e., ring efter värde, ring efter adress och ring efter referens. I den här artikeln ska vi diskutera om samtal för adress och samtal för referensmekanism.

Vad är en funktion?

Innan vi hoppar in i det aktuella ä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 kod som kan användas för att utföra en viss uppgift. En funktion används främst för att minska den repetitiva koden i ett C ++ - program. Det 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å det sättet sparar vi mycket repetitiv kod i programmet.

Varje C ++ - program ska ha funktionen “main ()”. Funktionen “main ()” är ingångspunkten för ett C ++ - program. Bortsett från funktionen “main ()” kan programmeraren definiera så många funktioner som de vill.

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

Return_type Function_Name (Input parameter List)

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 ++ (liknar C-språk) - Data Variable och Address Variable. Adressvariabeln används för att lagra adressen till en annan datavariabel. Låt oss till exempel överväga följande kodavsnitt:

int i = 100;
int * ptr = & i;

Här berättar det första uttalandet att variabeln "i" är en datavariabel och att den lagrar värdet 100. I det andra uttalandet förklarar vi en pekervariabel, dvs.e. "Ptr" och initiera det med adressen till variabeln "i".

Vad är referens??

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

int a = 200;
int & r = a;

I detta exempel har vi förklarat ett heltal, i.e. "A" och deklarerade sedan en referensvariabel "r", som initialiseras med värdet "a". Så, referensvariabeln är inget annat än ett alias för en annan variabel.

Parameteröverföringsmetoder:

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

  1. Ring efter värde / Gå förbi värde
  2. Ring efter adress / Gå förbi adress
  3. Ring med referens / Skicka med referens

I den här artikeln diskuterar vi - Call by address och Call by reference.

Vad är Call By Address / Pass by address?

I fallet med metoden Call by address / Pass by address skickas funktionsargumenten som adress. Samtalsfunktionen skickar adressen till parametrarna. Pekervariabler används i funktionsdefinitionen. Med hjälp av metoden Call by address kan funktionen komma åt de faktiska parametrarna och ändra dem. Vi kommer att se ett exempel på metoden Call by address senare 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:

Eftersom vi förstår begreppet parametrar som skickar metoder, kommer vi att se flera exempelprogram för att förstå parametern vidarebefordrar mekanismen i C ++:

  1. Exempel-1 - Ring efter adress (1)
  2. Exempel 2 - Ring efter adress (2)
  3. Exempel 3 - Call by Reference (1)
  4. Exempel-4 - Call by Reference (2)

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

Exempel-1 - Ring efter adress (1)

I det här exemplet ska vi demonstrera mekanismen för samtal efter adress. Från "huvud ()" -funktionen ringer vi till "hej ()" -funktionen och skickar adressen till "var". I funktionsdefinitionen får vi adressen "var" i en pekervariabel, dvs.e., “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 i "main ()" -funktionen efter "hallo ()" -funktionsanropet.

#omfatta
använder namnrymd std;
ogiltig hej (int * p)

cout << endl << "Inside hello() function : " << endl;
cout << "Value of *p = " << *p << endl;
* p = 200;
cout << "Value of *p = " << *p << endl;
cout << "Exiting hello() function." << endl;

int main ()

int var = 100;
cout << "Value of var inside main() function = " << var << endl;
hej (& var);
cout << endl << "Value of var inside main() function = " << var << endl;
returnera 0;

Exempel-2 - Ring efter adress (2)

Detta är ett annat exempel på metoden för samtal efter adress. I det här exemplet ska vi förklara hur metoden för samtal efter adress 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 anropet efter värdemekanismen för att byta två variabler byts inte de faktiska variablerna ut i samtalsfunktionen. Metoden för samtal efter adress 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 värdena för dessa två variabler med hjälp av pekarna. Som du kan se i nedanstående utdata byts det faktiska värdet av dessa variabler till "huvud ()" -funktionen efter att "mySwap ()" -funktionen har utförts.

#omfatta
använder namnrymd std;
ogiltig mySwap (int * vptr_1, int * vptr_2)

int temp_var;
temp_var = * vptr_1;
* vptr_1 = * vptr_2;
* vptr_2 = temp_var;

int main ()

int var_1 = 100;
int var_2 = 300;
cout << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
cout << "Calling mySwap() function - Call by address." << endl << endl;
mySwap (& var_1, & var_2);
cout << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
returnera 0;

Exempel 3 - Call by Reference (1)

I det här exemplet ska vi demonstrera hur call by reference fungerar i C++. I definitionen “hej ()” tas värdet emot som en referensvariabel (& p). Med hjälp av referensvariabeln (i.e., p), kan vi ändra värdet på den aktuella parametern (var) inuti “main ()” -funktionen.

#omfatta
använder namnrymd std;
ogiltig hej (int & p)

cout << endl << "Inside hello() function : " << endl;
cout << "Value of p = " << p << endl;
p = 200;
cout << "Value of p = " << p << endl;
cout << "Exiting hello() function." << endl;

int main ()

int var = 100;
cout << "Value of var inside main() function = " << var << endl;
hej (var);
cout << endl << "Value of var inside main() function = " << var << endl;
returnera 0;

Exempel 4 - Call by Reference (2)

Detta är ett annat exempel på ett samtal genom 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 "main ()" -funktionen med följande parametrar - var_1 och var_2. Inuti funktionen “mySwap ()” får vi parametrarna som referensvariabler.

#omfatta
använder namnrymd std;
ogiltig mySwap (int & vref_1, int & vref_2)

int temp_var;
temp_var = vref_1;
vref_1 = vref_2;
vref_2 = temp_var;

int main ()

int var_1 = 100;
int var_2 = 300;
cout << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
cout << "Calling mySwap() function - Call by reference." << endl << endl;
mySwap (var_1, var_2);
cout << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
returnera 0;

Slutsats

Förstå metoderna för överföring av parametrar i C++ är mycket viktigt. C-programmeringsspråket stöder endast samtalsvärde och samtalsadress. Men C ++ stöder Call genom referens tillsammans med de två föregående mekanismerna. I den här artikeln har vi sett flera fungerande exempel för att förstå begreppet Call per adress och Call genom referens. Ring efter adress är en mycket kraftfull och populär metod i inbäddade domänapplikationer.

Mus Hur man använder Xdotool för att stimulera musklick och tangenttryckningar i Linux
Hur man använder Xdotool för att stimulera musklick och tangenttryckningar i Linux
Xdotool är ett ledigt verktyg för öppen källkod för simulering av musklick och tangenttryckningar. Den här artikeln kommer att täcka en kort guide om ...
Mus Topp 5 Ergonomiska datormusprodukter för Linux
Topp 5 Ergonomiska datormusprodukter för Linux
Ger långvarig datoranvändning smärta i handleden eller fingrarna? Lider du av styva leder och måste ständigt skaka hand? Känner du en brännande smärta...
Mus Så här ändrar du inställningar för mus och pekplatta med Xinput i Linux
Så här ändrar du inställningar för mus och pekplatta med Xinput i Linux
De flesta Linux-distributioner levereras med "libinput" -bibliotek som standard för att hantera inmatningshändelser i ett system. Den kan bearbeta inm...