C ++

C ++ poziv prema adresi i poziv prema referenci

C ++ poziv prema adresi i poziv prema referenci

C ++ je fleksibilni programski jezik opće namjene. Izvorno ga je stvorio Bjarne Stroustrup, danski informatičar, davne 1985. godine. C ++ podržava metode prosljeđivanja s tri parametra, tj.e., poziv prema vrijednosti, poziv prema adresi i poziv prema referenci. U ovom ćemo članku razgovarati o pozivu putem adrese i pozivu putem referentnog mehanizma.

Što je funkcija?

Prije nego što skočimo u stvarnu temu, moramo shvatiti koja je funkcija u C-u++. Mnogi od vas možda su već upoznati s funkcijama.

Funkcija je u osnovi dio koda koji se može koristiti za izvršavanje određenog zadatka. Funkcija se uglavnom koristi za smanjenje ponavljajućeg koda u programu C ++. Ulaz uzima kao parametre, a izlaz vraća kao povratnu vrijednost. Ako funkciju definiramo jednom, možemo je pozvati / koristiti više puta u kasnijem dijelu našeg programa. Na taj način u programu štedimo puno ponavljajućeg koda.

Svaki program C ++ mora imati funkciju "main ()". Funkcija "main ()" početna je točka za program C ++. Osim funkcije "main ()", programer može definirati koliko god funkcija želi.

Evo sintakse definiranja funkcije:

Return_type Function_Name (popis ulaznih parametara)

Funkcija u C ++-u može prihvatiti 0 ili više ulaznih parametara, dok može vratiti samo jednu povratnu vrijednost.

Što je adresa?

U C ++-u postoje dvije vrste varijabli (slično jeziku C) - varijabla podataka i varijabla adrese. Varijabla adrese koristi se za pohranu adrese druge podatkovne varijable. Na primjer, uzmimo u obzir sljedeći isječak koda:

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

Ovdje nam prva izjava govori da je varijabla "i" podatkovna varijabla i pohranjuje vrijednost 100. U drugoj izjavi deklariramo pokazivačku varijablu, tj.e. "Ptr" i inicijalizira ga adresom varijable "i".

Što je Referenca?

Referenca je još jedna snažna značajka jezika C ++. Razmotrimo sljedeći isječak koda:

int a = 200;
int & r = a;

U ovom smo primjeru proglasili cijeli broj, tj.e. "A", a zatim deklarira referentnu varijablu "r", koja je inicijalizirana vrijednošću "a". Dakle, referentna varijabla nije ništa drugo do alias druge varijable.

Metode prosljeđivanja parametara:

Postoje tri vrste metoda prosljeđivanja parametara u jeziku C ++:

  1. Poziv po vrijednosti / Prođi po vrijednosti
  2. Nazovite po adresi / Prođite pored adrese
  3. Nazovite putem reference / Proslijedite putem reference

U ovom članku raspravljamo o - Poziv putem adrese i Poziv pozivom.

Što je Call By Address / Pass by address?

U slučaju metode Call by address / Pass by address, argumenti funkcije prosljeđuju se kao adresa. Funkcija pozivatelja prenosi adresu parametara. Varijable pokazivača koriste se u definiciji funkcije. Pomoću metode Call by address funkcija može pristupiti stvarnim parametrima i mijenjati ih. Primjer metode Poziv adresom vidjet ćemo u kasnijem odjeljku ovog članka.

Što je Call By Reference / Pass by reference?

U metodi Call by reference / Pass by reference, parametri funkcije prosljeđuju se kao referenca. Unutar definicije funkcije, stvarnim parametrima se pristupa pomoću referentne varijable.

Primjeri:

Sada, budući da razumijemo koncept metoda prosljeđivanja parametara, vidjet ćemo nekoliko primjera programa za razumijevanje mehanizma prosljeđivanja parametara u C ++:

  1. Primjer-1 - poziv putem adrese (1)
  2. Primjer-2 - poziv putem adrese (2)
  3. Primjer-3 - poziv referencom (1)
  4. Primjer-4 - Poziv putem reference (2)

Dana su prva dva primjera kako bi se objasnilo kako metoda Call by address djeluje u C-u++. Posljednja dva primjera su objašnjenje poziva putem referentnog koncepta.

Primjer-1 - poziv putem adrese (1)

U ovom ćemo primjeru demonstrirati poziv mehanizmom adrese. Iz funkcije “main ()” pozivamo funkciju “hello ()” i prosljeđujemo adresu “var”. U definiciji funkcije primamo adresu “var” u varijablu pokazivača, tj.e., "P". Unutar funkcije pozdrav, vrijednost "var" mijenja se na 200 uz pomoć pokazivača. Stoga se vrijednost "var" mijenja u 200 unutar funkcije "main ()" nakon poziva funkcije "hello ()".

#include
pomoću prostora imena 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;
pozdrav (& var);
cout << endl << "Value of var inside main() function = " << var << endl;
return 0;

Primjer-2 - poziv putem adrese (2)

Ovo je još jedan primjer poziva putem adrese. U ovom ćemo primjeru objasniti kako se metoda poziva putem adrese može koristiti za rješavanje problema iz stvarnog života. Na primjer, želimo napisati funkciju za zamjenu dviju varijabli. Ako koristimo mehanizam poziva po vrijednosti za zamjenu dvije varijable, stvarne varijable neće se zamijeniti u funkciji pozivatelja. Metoda poziva putem adrese može se koristiti u takvom scenariju. U ovom primjeru prosljeđujemo adresu i var_1 (& var_1) i var_2 (& var_2) funkciji “mySwap ()”. Unutar funkcije “mySwap ()” zamjenjujemo vrijednosti ove dvije varijable uz pomoć pokazivača. Kao što možete vidjeti u donjem izlazu, stvarna vrijednost ovih varijabli mijenja se u funkciji "main ()" nakon izvršavanja funkcije "mySwap ()".

#include
pomoću prostora imena std;
poništi moju zamjenu (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;
moja zamjena (& 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;
return 0;

Primjer-3 - poziv referencom (1)

U ovom ćemo primjeru demonstrirati kako poziv pozivanjem radi u C-u++. U definiciji funkcije „hello ()“ vrijednost se prima kao referentna varijabla (& p). Uz pomoć referentne varijable (tj.e., p), možemo promijeniti vrijednost stvarnog parametra (var) unutar funkcije “main ()”.

#include
pomoću prostora imena 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;
bok (var);
cout << endl << "Value of var inside main() function = " << var << endl;
return 0;

Primjer-4 - poziv referencom (2)

Ovo je još jedan primjer poziva putem reference. U ovom ćemo primjeru demonstrirati kako poziv pozivanjem radi u C ++ uz pomoć primjera iz stvarnog svijeta. Funkcija “mySwap ()” poziva se iz funkcije “main ()” sa sljedećim parametrima - var_1 i var_2. Unutar funkcije “mySwap ()” primamo parametre kao referentne varijable.

#include
pomoću prostora imena std;
poništi moju zamjenu (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;
moja zamjena (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;
return 0;

Zaključak

Razumijevanje metoda prosljeđivanja parametara u C++ je vrlo presudno. Programski jezik C podržava Call in value i Call by address. No, C ++ podržava Call pozivanjem zajedno s prethodna dva mehanizma. U ovom smo članku vidjeli nekoliko radnih primjera za razumijevanje koncepta Poziv putem adrese i Poziv putem reference. Poziv putem adrese vrlo je moćna i popularna metoda u aplikacijama s ugrađenom domenom.

OpenTTD vs Simutrans
Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...
Vodič za OpenTTD
OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...
SuperTuxKart za Linux
SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...