C ++

C ++ Call By Address og Call By Reference

C ++ Call By Address og Call By Reference

C ++ er et fleksibelt programmeringsspråk for generelle formål. Den ble opprinnelig opprettet av Bjarne Stroustrup, en dansk datavitenskapsmann, tilbake i 1985. C ++ støtter treparameteroverføringsmetoder, i.e., ring etter verdi, ring etter adresse og ring etter referanse. I denne artikkelen skal vi diskutere om ring etter adresse og ring etter referansemekanisme.

Hva er en funksjon?

Før vi hopper inn i det aktuelle emnet, må vi forstå hva funksjonen er i C++. Mange av dere er kanskje allerede kjent med funksjoner.

En funksjon er i utgangspunktet et stykke kode som kan brukes til å utføre en bestemt oppgave. En funksjon brukes hovedsakelig for å redusere den repeterende koden i et C ++ - program. Det tar input som parametere og returnerer output som en returverdi. Hvis vi definerer funksjonen en gang, kan vi ringe / bruke den flere ganger i den senere delen av programmet vårt. På den måten lagrer vi mye repeterende kode i programmet.

Hvert C ++ - program skal ha “main ()” - funksjonen. “Main ()” - funksjonen er inngangspunktet for et C ++ - program. Bortsett fra “hoved ()” -funksjonen, kan programmereren definere så mange funksjoner som de vil.

Her er syntaksen for å definere en funksjon:

Return_type Function_Name (Inngangsparameterliste)

Funksjon i C ++ kan akseptere 0 eller flere antall inngangsparametere, mens den bare kan returnere en returverdi.

Hva er adresse?

Det er to typer variabler i C ++ (ligner på C-språk) - Data Variable og Address Variable. Adressevariabelen brukes til å lagre adressen til en annen datavariabel. La oss for eksempel vurdere følgende kodebit:

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

Her forteller den første setningen oss at variabelen “i” er en datavariabel, og den lagrer verdien 100. I den andre uttalelsen erklærer vi en pekervariabel, i.e. "Ptr", og initialisere den med adressen til variabelen "i".

Hva er referanse?

Referansen er en annen kraftig funksjon i C ++ språk. La oss vurdere følgende kodebit:

int a = 200;
int & r = a;

I dette eksemplet har vi erklært et helt tall, i.e. “A” og erklærte deretter en referansevariabel “r”, som initialiseres med verdien av “a”. Så, referansevariabelen er ingenting annet enn et alias for en annen variabel.

Metoder for parameteroverføring:

Det er tre typer parameteroverføringsmetoder i C ++ språk:

  1. Ring etter verdi / Gå forbi verdi
  2. Ring etter adresse / Gå forbi adresse
  3. Ring via referanse / Pass by reference

I denne artikkelen diskuterer vi om - Ring etter adresse og Ring etter referanse.

Hva er Call By Address / Pass by address?

I tilfelle Call by address / Pass by address-metoden sendes funksjonsargumentene som adresse. Innringerfunksjonen sender adressen til parametrene. Pekervariabler brukes i funksjonsdefinisjonen. Ved hjelp av metoden Ring etter adresse kan funksjonen få tilgang til de faktiske parametrene og endre dem. Vi vil se et eksempel på metoden Ring etter adresse senere i denne artikkelen.

Hva er Call By Reference / Pass by reference?

I Call by reference / Pass by reference-metoden sendes funksjonsparametrene som en referanse. Inne i funksjonsdefinisjonen får du tilgang til de faktiske parameterne ved hjelp av referansevariabelen.

Eksempler:

Nå, siden vi forstår begrepet parameteroverføringsmetoder, vil vi se flere eksempler på programmer for å forstå parameteroverføringsmekanismen i C ++:

  1. Eksempel 1 - Ring etter adresse (1)
  2. Eksempel 2 - Ring etter adresse (2)
  3. Eksempel 3 - Ring etter referanse (1)
  4. Eksempel 4 - Ring etter referanse (2)

De to første eksemplene er gitt for å forklare hvordan Call by address-metoden fungerer i C++. De to siste eksemplene er å forklare Call by reference-konseptet.

Eksempel 1 - Ring etter adresse (1)

I dette eksemplet skal vi demonstrere mekanismen for samtale etter adresse. Fra “main ()” -funksjonen kaller vi “hallo ()” -funksjonen og sender adressen til “var”. I funksjonsdefinisjonen mottar vi adressen til “var” i en pekervariabel, i.e., “P”. Inne i funksjonen hei, blir verdien på “var” endret til 200 ved hjelp av pekeren. Derfor blir verdien på “var” endret til 200 inne i “main ()” -funksjonen etter “hallo ()” -funksjonen.

#inkludere
bruker navneområde std;
ugyldig hei (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;
hei (& var);
cout << endl << "Value of var inside main() function = " << var << endl;
retur 0;

Eksempel 2 - Ring etter adresse (2)

Dette er et annet eksempel på metoden for samtale etter adresse. I dette eksemplet skal vi forklare hvordan metoden samtale etter adresse kan brukes til å løse et problem i det virkelige liv. For eksempel ønsker vi å skrive en funksjon for å bytte to variabler. Hvis vi bruker verdien etter mekanisme for å bytte to variabler, blir ikke de faktiske variablene byttet ut i innringerfunksjonen. Metoden samtale etter adresse kan brukes i et slikt scenario. I dette eksemplet sender vi adressen til både var_1 (& var_1) og var_2 (& var_2) til "mySwap ()" -funksjonen. Inne i “mySwap ()” -funksjonen bytter vi verdiene til disse to variablene ved hjelp av pekerne. Som du kan se i utdataene nedenfor, blir den faktiske verdien av disse variablene byttet ut i “main ()” -funksjonen etter at “mySwap ()” -funksjonen er utført.

#inkludere
bruker navneområde 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;
retur 0;

Eksempel 3 - Ring etter referanse (1)

I dette eksemplet skal vi demonstrere hvordan call by reference fungerer i C++. I definisjonen "hallo ()" mottas verdien som en referansevariabel (& p). Ved hjelp av referansevariabelen (i.e., p), er vi i stand til å endre verdien av den faktiske parameteren (var) inne i “main ()” -funksjonen.

#inkludere
bruker navneområde std;
ugyldig hei (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;
hei (var);
cout << endl << "Value of var inside main() function = " << var << endl;
retur 0;

Eksempel 4 - Ring etter referanse (2)

Dette er et annet eksempel på en samtale med referanse. I dette eksemplet skal vi demonstrere hvordan call by reference fungerer i C ++ ved hjelp av et eksempel fra den virkelige verden. “MySwap ()” -funksjonen kalles fra “main ()” -funksjonen med følgende parametere - var_1 og var_2. Inne i “mySwap ()” -funksjonen mottar vi parametrene som referansevariabler.

#inkludere
bruker navneområde 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;
retur 0;

Konklusjon

Forstå parameteroverføring metodene i C++ er veldig avgjørende. C-programmeringsspråket støtter bare Ring etter verdi og Ring bare etter adresse. Men C ++ støtter Call ved referanse sammen med de to foregående mekanismene. I denne artikkelen har vi sett flere arbeidseksempler for å forstå begrepet Call by address og Call by reference. Ring etter adresse er en veldig kraftig og populær metode i innebygde domeneapplikasjoner.

Nyttige verktøy for Linux-spillere
Hvis du liker å spille spill på Linux, er sjansen stor for at du har brukt apper og verktøy som Wine, Lutris og OBS Studio for å forbedre spilloppleve...
HD Remastered Games for Linux som aldri hadde en Linux-utgave tidligere
Mange spillutviklere og utgivere kommer med HD-remaster av gamle spill for å forlenge franchisetiden, vennligst fans som ber om kompatibilitet med mod...
Hvordan bruke AutoKey til å automatisere Linux-spill
AutoKey er et desktopautomatiseringsverktøy for Linux og X11, programmert i Python 3, GTK og Qt. Ved å bruke skript og MACRO-funksjonalitet kan du aut...