C ++

C ++ klic po naslovu in klic po referenci

C ++ klic po naslovu in klic po referenci

C ++ je prilagodljiv programski jezik za splošno uporabo. Prvotno ga je ustvaril Bjarne Stroustrup, danski računalnik, že leta 1985. C ++ podpira triparametrske metode posredovanja, tj.e., klic po vrednosti, klic po naslovu in klic po referenci. V tem članku bomo razpravljali o klicu po naslovu in klicu po referenčnem mehanizmu.

Kaj je funkcija?

Preden skočimo v dejansko temo, moramo razumeti, kakšna je funkcija v jeziku C++. Mnogi od vas morda že poznate funkcije.

Funkcija je v bistvu del kode, ki se lahko uporablja za izvajanje določene naloge. Funkcija se uporablja predvsem za zmanjšanje ponavljajoče se kode v programu C ++. Vhod upošteva kot parametre, izhod pa vrne kot vrnjeno vrednost. Če funkcijo definiramo enkrat, jo lahko v poznejšem delu našega programa večkrat pokličemo / uporabimo. Na ta način v program shranimo veliko ponavljajočih se kod.

Vsak program C ++ mora imeti funkcijo "main ()". Funkcija “main ()” je vstopna točka za program C ++. Poleg funkcije "main ()" lahko programer definira poljubno število funkcij.

Tu je sintaksa definiranja funkcije:

Return_type Function_Name (seznam vhodnih parametrov)

Funkcija v C ++ lahko sprejme 0 ali več vhodnih parametrov, medtem ko lahko vrne samo eno vrnjeno vrednost.

Kaj je naslov?

V jeziku C ++ obstajata dve vrsti spremenljivk (podobno kot jezik C) - podatkovna spremenljivka in spremenljivka naslova. Naslovna spremenljivka se uporablja za shranjevanje naslova druge podatkovne spremenljivke. Upoštevajmo na primer naslednji delček kode:

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

Tu nam prvi stavek pove, da je spremenljivka "i" podatkovna spremenljivka in hrani vrednost 100. V drugem stavku razglašamo kazalno spremenljivko, tj.e. "Ptr" in ga inicializira z naslovom spremenljivke "i".

Kaj je referenca?

Referenca je še ena močna značilnost jezika C ++. Upoštevajmo naslednji delček kode:

int a = 200;
int & r = a;

V tem primeru smo razglasili celo število, tj.e. "A" in nato razglasi referenčno spremenljivko "r", ki se inicializira z vrednostjo "a". Torej, referenčna spremenljivka ni nič drugega kot vzdevek druge spremenljivke.

Metode prenosa parametrov:

V jeziku C ++ obstajajo tri vrste metod prenosa parametrov:

  1. Pokliči po vrednosti / Prenesi po vrednosti
  2. Pokliči po naslovu / mimo naslova
  3. Klic po referenci / Prenos po referenci

V tem članku razpravljamo o - Pokliči po naslovu in Pokliči po sklicu.

Kaj je Call By Address / Pass by address?

V primeru metode Call by address / Pass by address se argumenti funkcije posredujejo kot naslov. Funkcija klicatelja posreduje naslov parametrov. Kazalne spremenljivke se uporabljajo v definiciji funkcije. S pomočjo metode Pokliči po naslovu lahko funkcija dostopa do dejanskih parametrov in jih spreminja. Primer metode Call by address bomo videli v nadaljevanju tega članka.

Kaj je Call By Reference / Pass by reference?

Pri metodi Call by reference / Pass by reference se parametri funkcije posredujejo kot referenca. Znotraj definicije funkcije se do dejanskih parametrov dostopa s pomočjo referenčne spremenljivke.

Primeri:

Ker zdaj razumemo koncept metod posredovanja parametrov, bomo videli več primerov programov za razumevanje mehanizma prenosa parametrov v jeziku C ++:

  1. Primer-1 - klic po naslovu (1)
  2. Primer-2 - klic po naslovu (2)
  3. Primer-3 - klic po referenci (1)
  4. Primer-4 - klic po referenci (2)

Prva dva primera sta pojasnjena, kako deluje metoda Call by address v jeziku C++. Zadnja dva primera sta razlaga razpisa z referenčnim konceptom.

Primer-1 - klic po naslovu (1)

V tem primeru bomo prikazali klic z mehanizmom naslova. Iz funkcije “main ()” prikličemo funkcijo “hello ()” in posredujemo naslov “var”. V definiciji funkcije prejmemo naslov »var« v spremenljivki kazalca, tj.e., "P". Znotraj funkcije hello se vrednost “var” s pomočjo kazalca spremeni na 200. Zato se vrednost »var« po klicu funkcije »hello ()« spremeni v 200 znotraj funkcije »main ()«.

#include
uporaba imenskega prostora std;
void hello (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;
živjo (& var);
cout << endl << "Value of var inside main() function = " << var << endl;
vrnitev 0;

Primer-2 - klic po naslovu (2)

To je še en primer klica po naslovu. V tem primeru bomo razložili, kako lahko metodo klica po naslovu uporabimo za reševanje resničnega problema. Na primer, želimo napisati funkcijo za zamenjavo dveh spremenljivk. Če uporabimo mehanizem klic po vrednosti za zamenjavo dveh spremenljivk, se dejanske spremenljivke v funkciji klicatelja ne zamenjajo. V takem primeru je mogoče uporabiti metodo klica po naslovu. V tem primeru posredujemo naslov var_1 (& var_1) in var_2 (& var_2) funkciji “mySwap ()”. V funkciji “mySwap ()” s pomočjo kazalcev zamenjamo vrednosti teh dveh spremenljivk. Kot lahko vidite v spodnjem izhodu, se dejanska vrednost teh spremenljivk zamenja po funkciji "main ()" po izvedbi funkcije "mySwap ()".

#include
uporaba imenskega prostora std;
void 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;
vrnitev 0;

Primer-3 - klic po referenci (1)

V tem primeru bomo pokazali, kako klic s sklicem deluje v jeziku C++. V definiciji funkcije »hello ()« je vrednost sprejeta kot referenčna spremenljivka (& p). S pomočjo referenčne spremenljivke (tj.e., p), lahko spremenimo vrednost dejanskega parametra (var) znotraj funkcije “main ()”.

#include
uporaba imenskega prostora std;
void hello (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;
živjo (var);
cout << endl << "Value of var inside main() function = " << var << endl;
vrnitev 0;

Primer-4 - klic po referenci (2)

To je še en primer klica s sklicem. V tem primeru bomo s pomočjo primera iz resničnega sveta pokazali, kako klic s sklicem deluje v jeziku C ++. Funkcija “mySwap ()” se prikliče iz funkcije “main ()” z naslednjima parametroma - var_1 in var_2. Znotraj funkcije “mySwap ()” parametre sprejemamo kot referenčne spremenljivke.

#include
uporaba imenskega prostora std;
void 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;
vrnitev 0;

Zaključek

Razumevanje metod posredovanja parametrov v C++ je zelo pomembno. Programski jezik C podpira samo klic po vrednosti in klic po naslovu. Toda C ++ podpira klic s sklicevanjem skupaj s prejšnjima mehanizmoma. V tem članku smo videli več delovnih primerov za razumevanje pojma Pokliči po naslovu in Pokliči po sklicu. Klic po naslovu je zelo močna in priljubljena metoda v aplikacijah z vdelano domeno.

OpenTTD vs Simutrans
Ustvarjanje lastne simulacije prevoza je lahko zabavno, sproščujoče in izjemno vabljivo. Zato morate preizkusiti čim več iger, da boste našli tisto, k...
Vadnica za OpenTTD
OpenTTD je ena izmed najbolj priljubljenih poslovnih simulacijskih iger. V tej igri morate ustvariti čudovit prevozniški posel. Vendar boste začeli na...
SuperTuxKart za Linux
SuperTuxKart je odličen naslov, zasnovan tako, da vam brezplačno ponuja izkušnjo Mario Kart v vašem sistemu Linux. Igrati je precej zahtevno in zabavn...