C ++ Poziv po adresi i Poziv po referenci

C Call Address



C ++ je fleksibilan programski jezik opće namjene. Izvorno ga je stvorio Bjarne Stroustrup, danski informatičar, 1985. C ++ podržava metode prenošenja s tri parametra, tj. poziv po vrijednosti, poziv po adresi i poziv po referenci. U ovom ćemo članku raspravljati o pozivu po adresi i pozivu po referentnom mehanizmu.

Što je funkcija?

Prije nego što prijeđemo na stvarnu temu, moramo razumjeti koja je funkcija u C ++. Možda ste mnogi od vas 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 C ++ programu. Uzima ulaz kao parametre, a izlaz vraća kao povratnu vrijednost. Ako definiramo funkciju jednom, možemo je pozvati/koristiti više puta u kasnijem dijelu našeg programa. Na taj način spremamo mnogo ponavljajućeg koda u program.



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



Evo sintakse definiranja funkcije:





Return_type Ime_funkcije(Popis ulaznih parametara)

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

Što je adresa?

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



inti= 100;
int *ptr= &i;

Ovdje nam prva izjava govori da je varijabla i varijabla podataka, a pohranjuje vrijednost 100. U drugoj tvrdnji deklariramo varijablu pokazivača, tj. Ptr, i inicijaliziramo je adresom varijable i.

Što je referenca?

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

intdo= 200;
int &r=do;

U ovom primjeru deklarirali smo cijeli broj, tj. A, a zatim deklarirali referentnu varijablu r, koja se inicijalizira s vrijednošću a. Dakle, referentna varijabla nije ništa drugo do alias druge varijable.

Metode prenošenja parametara:

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

  1. Poziv prema vrijednosti / Prijenos prema vrijednosti
  2. Nazovite po adresi / Prođite po adresi
  3. Nazovite po referenci / Prođite po referenci

U ovom članku govorimo o - Pozivu po adresi i Pozivu po referenci.

Što je Call By Address / Pass by address?

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

Što je Call By Reference / Pass by reference?

U metodi Poziv po referenci / Proputi po referenci parametri funkcije prenose 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 prenošenja parametara u C ++:

  1. Primjer-1-Poziv po adresi (1)
  2. Primjer-2-Poziv po adresi (2)
  3. Primjer-3-Poziv putem reference (1)
  4. Primjer-4-Poziv putem reference (2)

Prva dva primjera data su kako bi se objasnilo kako metoda Call by address radi u C ++. Zadnja dva primjera objašnjavaju Poziv referentnim konceptom.

Primjer-1-Poziv po adresi (1)

U ovom primjeru pokazat ćemo mehanizam poziva po adresi. Iz funkcije main () pozivamo funkciju hello () i prosljeđujemo adresu var. U definiciji funkcije primamo adresu var u varijabli pokazivača, tj. P. Unutar funkcije hello, vrijednost var se mijenja na 200 uz pomoć pokazivača. Stoga se vrijednost var mijenja nakon 200 poziva funkcije hello () na 200 unutar funkcije main ().

#uključi
koristeći imenski prostorsati;

poništitizdravo(int *str)
{
trošak <<endl<< 'Unutar funkcije hello ():' <<endl;
trošak << 'Vrijednost *p =' << *str<<endl;
*str= 200;
trošak << 'Vrijednost *p =' << *str<<endl;
trošak << 'Izlazak iz funkcije hello ().' <<endl;
}

intglavni()
{
intgdje= 100;
trošak << 'Vrijednost var unutar main () function =' <<gdje<<endl;

zdravo(&gdje);

trošak <<endl<< 'Vrijednost var unutar main () function =' <<gdje<<endl;

povratak 0;
}

Primjer-2-Poziv po adresi (2)

Ovo je još jedan primjer metode pozivanja po adresi. U ovom primjeru ćemo objasniti kako se metoda poziva po adresi može koristiti za rješavanje problema iz stvarnog života. Na primjer, želimo napisati funkciju za zamjenu dviju varijabli. Ako za zamjenu dviju varijabli koristimo mehanizam poziva po vrijednosti, stvarne se varijable ne mijenjaju u funkciji pozivatelja. U takvom se scenariju može koristiti metoda poziva prema adresi. U ovom primjeru prosljeđujemo adresu funkcije var_1 (& var_1) i var_2 (& var_2) funkciji mySwap (). Unutar funkcije mySwap () mijenjamo vrijednosti ovih dviju varijabli 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 ().

#uključi
koristeći imenski prostorsati;

poništitimySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

intglavni()
{
intvar_1= 100;
intvar_2= 300;

trošak << 'Prije pozivanja funkcije mySwap (), vrijednost var_1:' <<var_1<<endl;
trošak << 'Prije pozivanja funkcije mySwap (), vrijednost var_2:' <<var_2<<endl<<endl;

trošak << 'Pozivanje funkcije mySwap () - Nazovite po adresi.' <<endl<<endl;
mySwap(&var_1,&var_2);

trošak << 'Nakon pozivanja funkcije mySwap (), vrijednost var_1:' <<var_1<<endl;
trošak << 'Nakon pozivanja funkcije mySwap (), vrijednost var_2:' <<var_2<<endl;

povratak 0;
}

Primjer-3-Poziv putem reference (1)

U ovom primjeru pokazat ćemo kako call by reference funkcionira u C ++. U definiciji funkcije hello () vrijednost se prima kao referentna varijabla (& p). Uz pomoć referentne varijable (tj. P), možemo promijeniti vrijednost stvarnog parametra (var) unutar funkcije main ().

#uključi
koristeći imenski prostorsati;

poništitizdravo(int &str)
{
trošak <<endl<< 'Unutar funkcije hello ():' <<endl;
trošak << 'Vrijednost p =' <<str<<endl;
str= 200;
trošak << 'Vrijednost p =' <<str<<endl;
trošak << 'Izlazak iz funkcije hello ().' <<endl;
}

intglavni()
{
intgdje= 100;
trošak << 'Vrijednost var unutar main () function =' <<gdje<<endl;

zdravo(gdje);

trošak <<endl<< 'Vrijednost var unutar main () function =' <<gdje<<endl;

povratak 0;
}

Primjer-4-Poziv putem reference (2)

Ovo je još jedan primjer poziva prema referenci. U ovom primjeru pokazat ćemo kako call by reference funkcionira 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 () parametre primamo kao referentne varijable.

#uključi
koristeći imenski prostorsati;

poništitimySwap(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

intglavni()
{
intvar_1= 100;
intvar_2= 300;

trošak << 'Prije pozivanja funkcije mySwap (), vrijednost var_1:' <<var_1<<endl;
trošak << 'Prije pozivanja funkcije mySwap (), vrijednost var_2:' <<var_2<<endl<<endl;

trošak << 'Pozivanje funkcije mySwap () - Poziv prema referenci.' <<endl<<endl;
mySwap(var_1, var_2);

trošak << 'Nakon pozivanja funkcije mySwap (), vrijednost var_1:' <<var_1<<endl;
trošak << 'Nakon pozivanja funkcije mySwap (), vrijednost var_2:' <<var_2<<endl;

povratak 0;
}

Zaključak

Razumijevanje metoda prosljeđivanja parametara u C ++ je vrlo presudan. Programski jezik C podržava Poziv prema vrijednosti i Poziv samo po adresi. No, C ++ podržava Call pozivanjem zajedno s prethodna dva mehanizma. U ovom članku vidjeli smo nekoliko radnih primjera za razumijevanje koncepta poziva po adresi i poziva po referenci. Poziv po adresi vrlo je moćna i popularna metoda u aplikacijama ugrađene domene.