C ++

C ++ Opkald efter adresse og Opkald efter reference

C ++ Opkald efter adresse og Opkald efter reference

C ++ er et fleksibelt programmeringssprog til generelle formål. Det blev oprindeligt oprettet af Bjarne Stroustrup, en dansk datalog, tilbage i 1985. C ++ understøtter tre-parameter-overførselsmetoder, dvs.e., ring efter værdi, ring efter adresse og ring efter reference. I denne artikel skal vi diskutere om opkald efter adresse og opkald ved hjælp af referencemekanisme.

Hvad er en funktion?

Før vi hopper ind i det aktuelle emne, skal vi forstå, hvad funktionen er i C++. Mange af jer er måske allerede bekendt med funktioner.

En funktion er dybest set et stykke kode, der kan bruges til at udføre en bestemt opgave. En funktion bruges hovedsageligt til at reducere den gentagne kode i et C ++ - program. Det tager input som parametre og returnerer output som en returværdi. Hvis vi definerer funktionen en gang, kan vi ringe / bruge den flere gange i den senere del af vores program. På den måde gemmer vi en masse gentagne koder i programmet.

Hvert C ++ - program skal have funktionen “main ()”. Funktionen “main ()” er indgangspunktet for et C ++ - program. Bortset fra “main ()” - funktionen kan programmøren definere så mange funktioner, som de vil.

Her er syntaksen for at definere en funktion:

Return_type Function_Name (Input parameter List)

Funktion i C ++ kan acceptere 0 eller flere antal inputparametre, mens den kun kan returnere en returværdi.

Hvad er adresse?

Der er to typer variabler i C ++ (svarer til C-sprog) - Data Variable og Address Variable. Adressevariablen bruges til at gemme adressen på en anden datavariabel. Lad os f.eks. Overveje følgende kodestykke:

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

Her fortæller den første sætning os, at variablen “i” er en datavariabel, og den lagrer værdien 100. I den anden erklæring erklærer vi en markørvariabel, i.e. "Ptr" og initialisere det med adressen på variablen "i".

Hvad er reference?

Henvisningen er en anden stærk funktion i C ++ sprog. Lad os overveje følgende kodestykke:

int a = 200;
int & r = a;

I dette eksempel har vi erklæret et heltal, i.e. “A” og erklærede derefter en referencevariabel “r”, som initialiseres med værdien af ​​“a”. Så referencevariablen er intet andet end et alias for en anden variabel.

Parameteroverførselsmetoder:

Der er tre typer parameteroverførselsmetoder på C ++ sprog:

  1. Ring efter værdi / Gå forbi værdi
  2. Ring efter adresse / Gå forbi adresse
  3. Ring ved henvisning / Gå forbi reference

I denne artikel diskuterer vi om - Ring efter adresse og Ring efter reference.

Hvad er Call By Address / Pass by address?

I tilfælde af Call by address / Pass by address-metoden videregives funktionsargumenterne som adresse. Opkaldsfunktionen videregiver adressen til parametrene. Markørvariabler anvendes i funktionsdefinitionen. Ved hjælp af metoden Opkald efter adresse kan funktionen få adgang til de faktiske parametre og ændre dem. Vi vil se et eksempel på metoden Opkald efter adresse senere i denne artikel.

Hvad er Call By Reference / Pass by reference?

I metoden Call by reference / Pass by reference overføres funktionsparametrene som en reference. Inde i funktionsdefinitionen får du adgang til de aktuelle parametre ved hjælp af referencevariablen.

Eksempler:

Nu, da vi forstår begrebet metoder til parameteroverføring, vil vi se flere eksempler på programmer til forståelse af parameteroverførselsmekanismen i C ++:

  1. Eksempel 1 - Opkald efter adresse (1)
  2. Eksempel 2 - Opkald efter adresse (2)
  3. Eksempel 3 - Opkald efter reference (1)
  4. Eksempel 4 - Opkald ved henvisning (2)

De første to eksempler gives for at forklare, hvordan metoden Opkald efter adresse fungerer i C++. De sidste to eksempler er at forklare Call by reference-konceptet.

Eksempel 1 - Opkald efter adresse (1)

I dette eksempel skal vi demonstrere opkald efter adresse-mekanismen. Fra “main ()” -funktionen kalder vi “hej ()” -funktionen og sender adressen til “var”. I funktionsdefinitionen modtager vi adressen "var" i en markørvariabel, i.e., “P”. Inde i funktionen hej, ændres værdien af ​​“var” til 200 ved hjælp af markøren. Derfor ændres værdien af ​​“var” til 200 inden for “main ()” -funktionen efter “hej ()” -funktionskaldet.

#omfatte
ved hjælp af namespace std;
ugyldigt 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;
returnere 0;

Eksempel 2 - Opkald efter adresse (2)

Dette er et andet eksempel på opkald efter adressemetode. I dette eksempel skal vi forklare, hvordan opkald efter adresse-metoden kan bruges til at løse et virkeligt problem. For eksempel vil vi skrive en funktion til at bytte to variabler. Hvis vi bruger call by value-mekanismen til at bytte to variabler, byttes de faktiske variabler ikke i opkaldsfunktionen. Opkald efter adresse-metoden kan bruges i et sådant scenario. I dette eksempel videregiver vi adressen på både var_1 (& var_1) og var_2 (& var_2) til funktionen "mySwap ()". Inde i funktionen “mySwap ()” bytter vi værdierne for disse to variabler ved hjælp af markørerne. Som du kan se i nedenstående output, byttes den faktiske værdi af disse variabler i "main ()" - funktionen, efter at "mySwap ()" - funktionen er udført.

#omfatte
ved hjælp af namespace std;
ugyldig 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;
returnere 0;

Eksempel 3 - Opkald efter reference (1)

I dette eksempel skal vi demonstrere, hvordan call by reference fungerer i C++. I definitionen af ​​"hej ()" modtages værdien som en referencevariabel (& p). Ved hjælp af referencevariablen (i.e., p), er vi i stand til at ændre værdien af ​​den aktuelle parameter (var) inden for “main ()” -funktionen.

#omfatte
ved hjælp af namespace std;
ugyldigt 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;
returnere 0;

Eksempel 4 - Opkald ved henvisning (2)

Dette er et andet eksempel på et kald ved henvisning. I dette eksempel skal vi demonstrere, hvordan call by reference fungerer i C ++ ved hjælp af et eksempel fra den virkelige verden. Funktionen “mySwap ()” kaldes fra “main ()” -funktionen med følgende parametre - var_1 og var_2. Inde i “mySwap ()” - funktionen modtager vi parametrene som referencevariabler.

#omfatte
ved hjælp af namespace std;
ugyldig 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;
returnere 0;

Konklusion

Forståelse af parameteroverførselsmetoder i C++ er meget afgørende. C-programmeringssproget understøtter kun opkald efter værdi og opkald efter adresse. Men C ++ understøtter Call via reference sammen med de to foregående mekanismer. I denne artikel har vi set flere arbejdseksempler for at forstå begrebet Opkald efter adresse og Opkald ved henvisning. Opkald efter adresse er en meget kraftfuld og populær metode i indlejrede domæneapplikationer.

Sådan bruges GameConqueror Cheat Engine i Linux
Artiklen dækker en vejledning om brug af GameConqueror-snydemotoren i Linux. Mange brugere, der spiller spil på Windows, bruger ofte "Cheat Engine" -a...
Bedste spilkonsolemulatorer til Linux
Denne artikel viser en liste over populære spilkonsolemuleringssoftware, der er tilgængelig til Linux. Emulation er et softwarekompatibilitetslag, der...
Bedste Linux Distros til spil i 2021
Linux-operativsystemet er kommet langt fra dets originale, enkle, serverbaserede udseende. Dette operativsystem er forbedret enormt i de senere år og ...