C ++ Call by Address a Call by Reference

C Call Address



C ++ je flexibilný programovací jazyk na všeobecné účely. Pôvodne bol vytvorený spoločnosťou Bjarne Stroustrup, dánsky počítačový vedec už v roku 1985. C ++ podporuje metódy odovzdávania troch parametrov, tj. volanie podľa hodnoty, volanie podľa adresy a volanie podľa odkazu. V tomto článku sa budeme zaoberať mechanizmom volania podľa adresy a telefonátu podľa odkazu.

Čo je to funkcia?

Predtým, ako sa dostaneme k aktuálnej téme, musíme pochopiť, aká je funkcia v C ++. Mnoho z vás už možno pozná funkcie.







Funkcia je v podstate kus kódu, ktorý je možné použiť na vykonanie určitej úlohy. Funkcia sa používa hlavne na zníženie opakujúceho sa kódu v programe C ++. Vstup berie ako parametre a výstup vracia ako návratovú hodnotu. Ak definujeme funkciu raz, môžeme ju v neskoršej časti nášho programu vyvolať/použiť viackrát. V programe tak ušetríme veľa opakujúceho sa kódu.



Každý program C ++ musí mať funkciu main (). Funkcia main () je vstupným bodom programu C ++. Okrem funkcie main () môže programátor definovať ľubovoľný počet funkcií.



Tu je syntax definície funkcie:





Return_type Názov_funkcie(Zoznam vstupných parametrov)

Funkcia v C ++ môže akceptovať 0 alebo viac vstupných parametrov, zatiaľ čo môže vrátiť iba jednu návratovú hodnotu.

Čo je adresa?

V C ++ existujú dva typy premenných (podobné jazyku C) - premenná údajov a adresa. Premenná adresy slúži na uloženie adresy inej dátovej premennej. Uvažujme napríklad o nasledujúcom úryvku kódu:



inti= 100;
int *ptr= &i;

Tu nám prvý príkaz hovorí, že premenná i je dátová premenná a ukladá hodnotu 100. V druhom príkaze deklarujeme premennú ukazovateľa, t. J. Ptr, a inicializujeme ju s adresou premennej i.

Čo je to referencia?

Referencia je ďalšou silnou funkciou jazyka C ++. Zoberme si nasledujúci útržok kódu:

intdo= 200;
int &r=do;

V tomto prípade sme deklarovali celé číslo, t.j. a a potom sme deklarovali referenčnú premennú r, ktorá je inicializovaná hodnotou a. Referenčná premenná teda nie je nič iné ako alias inej premennej.

Metódy odovzdávania parametrov:

V jazyku C ++ existujú tri typy metód odovzdávania parametrov:

  1. Volajte podľa hodnoty / Prejdite podľa hodnoty
  2. Volajte podľa adresy / Prejdite podľa adresy
  3. Volajte podľa referencie / Prejdite podľa referencie

V tomto článku diskutujeme o - Call by address and Call by reference.

Čo je to volanie podľa adresy / priechod podľa adresy?

V prípade metódy Call by address / Pass by address sa argumenty funkcie odovzdávajú ako adresa. Funkcia volajúceho odovzdá adresu parametrov. Pri definícii funkcie sa používajú premenné ukazovateľa. Pomocou metódy Call by address môže funkcia pristupovať k aktuálnym parametrom a upravovať ich. V ďalšej časti tohto článku uvidíme príklad metódy Call by address.

Čo je Call By Reference / Pass by reference?

V metóde Call by reference / Pass by reference sa parametre funkcie odovzdávajú ako referencia. Vnútri definície funkcie sa k skutočným parametrom pristupuje pomocou referenčnej premennej.

Príklady:

Teraz, keďže chápeme koncept metód odovzdávania parametrov, uvidíme niekoľko príkladov programov na pochopenie mechanizmu odovzdávania parametrov v C ++:

  1. Príklad-1-Hovor podľa adresy (1)
  2. Príklad-2-Hovor podľa adresy (2)
  3. Príklad 3-Volanie podľa referencie (1)
  4. Príklad-4-Referenčná výzva (2)

Prvé dva príklady sú uvedené na vysvetlenie toho, ako metóda Call by address funguje v C ++. Posledné dva príklady majú vysvetliť koncept Call by reference.

Príklad-1-Hovor podľa adresy (1)

V tomto prípade ukážeme mechanizmus volania podľa adresy. Z funkcie main () voláme funkciu hello () a odovzdávame adresu var. V definícii funkcie dostávame adresu var v premennej ukazovateľa, t. J. P. Vnútri funkcie ahoj sa hodnota var mení pomocou ukazovateľa na 200. Po volaní funkcie hello () sa preto hodnota var mení vo funkcii main () na 200.

#zahrnúť
použitím priestor mienhodiny;

prázdnyAhoj(int *p)
{
náklady <<endl<< „Funkcia Inside Hello ():“ <<endl;
náklady << „Hodnota *p =“ << *p<<endl;
*p= 200;
náklady << „Hodnota *p =“ << *p<<endl;
náklady << 'Ukončenie funkcie ahoj ().' <<endl;
}

intHlavná()
{
intkde= 100;
náklady << 'Hodnota var vo vnútri funkcie main () =' <<kde<<endl;

Ahoj(&kde);

náklady <<endl<< 'Hodnota var vo vnútri funkcie main () =' <<kde<<endl;

vrátiť sa 0;
}

Príklad-2-Hovor podľa adresy (2)

Toto je ďalší príklad metódy call by address. V tomto prípade vysvetlíme, ako možno metódu volania podľa adresy použiť na vyriešenie problému v skutočnom živote. Napríklad chceme napísať funkciu na výmenu dvoch premenných. Ak použijeme mechanizmus volania podľa hodnoty na výmenu dvoch premenných, skutočné premenné sa vo funkcii volajúceho nezamenia. V takom prípade je možné použiť metódu volania podľa adresy. V tomto prípade odovzdávame adresu funkcie var_1 (& var_1) aj var_2 (& var_2) do funkcie mySwap (). Vnútri funkcie mySwap () vymieňame hodnoty týchto dvoch premenných pomocou ukazovateľov. Ako vidíte na nižšie uvedenom výstupe, skutočná hodnota týchto premenných sa po vykonaní funkcie mySwap () zamení vo funkcii main ().

#zahrnúť
použitím priestor mienhodiny;

prázdnymySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

intHlavná()
{
intvar_1= 100;
intvar_2= 300;

náklady << „Pred volaním funkcie mySwap () hodnota var_1: ' <<var_1<<endl;
náklady << „Pred zavolaním funkcie mySwap () hodnota var_2: ' <<var_2<<endl<<endl;

náklady << „Volanie funkcie mySwap () - volanie podľa adresy.“ <<endl<<endl;
mySwap(&var_1,&var_2);

náklady << 'Po zavolaní funkcie mySwap (), hodnota var_1:' <<var_1<<endl;
náklady << 'Po zavolaní funkcie mySwap (), hodnota var_2:' <<var_2<<endl;

vrátiť sa 0;
}

Príklad 3-Volanie podľa referencie (1)

V tomto prípade ukážeme, ako funguje volanie podľa odkazu v C ++. V definícii funkcie hello () sa hodnota prijíma ako referenčná premenná (& p). Pomocou referenčnej premennej (t.j. p) sme schopní zmeniť hodnotu skutočného parametra (var) vo funkcii main ().

#zahrnúť
použitím priestor mienhodiny;

prázdnyAhoj(int &p)
{
náklady <<endl<< „Funkcia Inside Hello ():“ <<endl;
náklady << „Hodnota p =“ <<p<<endl;
p= 200;
náklady << „Hodnota p =“ <<p<<endl;
náklady << 'Ukončenie funkcie ahoj ().' <<endl;
}

intHlavná()
{
intkde= 100;
náklady << 'Hodnota var vo vnútri funkcie main () =' <<kde<<endl;

Ahoj(kde);

náklady <<endl<< 'Hodnota var vo vnútri funkcie main () =' <<kde<<endl;

vrátiť sa 0;
}

Príklad-4-Referenčná výzva (2)

Toto je ďalší príklad hovoru podľa odkazu. V tomto prípade ideme pomocou príkladu zo skutočného sveta demonštrovať, ako funguje call by reference v C ++. Funkcia mySwap () sa volá z funkcie main () s nasledujúcimi parametrami - var_1 a var_2. Vnútri funkcie mySwap () dostávame parametre ako referenčné premenné.

#zahrnúť
použitím priestor mienhodiny;

prázdnymySwap(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

intHlavná()
{
intvar_1= 100;
intvar_2= 300;

náklady << „Pred volaním funkcie mySwap () hodnota var_1: ' <<var_1<<endl;
náklady << „Pred zavolaním funkcie mySwap () hodnota var_2: ' <<var_2<<endl<<endl;

náklady << 'Volanie funkcie mySwap () - volanie podľa odkazu.' <<endl<<endl;
mySwap(var_1, var_2);

náklady << 'Po zavolaní funkcie mySwap (), hodnota var_1:' <<var_1<<endl;
náklady << 'Po zavolaní funkcie mySwap (), hodnota var_2:' <<var_2<<endl;

vrátiť sa 0;
}

Záver

Pochopenie metód odovzdávania parametrov v C ++ je veľmi zásadný. Programovací jazyk C podporuje iba volanie podľa hodnoty a volanie podľa adresy. Ale C ++ podporuje Call by reference spolu s predchádzajúcimi dvoma mechanizmami. V tomto článku sme videli niekoľko pracovných príkladov na pochopenie konceptu Call by address a Call by reference. Hovor podľa adresy je veľmi efektívna a obľúbená metóda v aplikáciách vstavaných domén.