C ++ skambutis pagal adresą ir skambutis pagal nuorodą

C Call Address



C ++ yra lanksti bendrosios paskirties programavimo kalba. Iš pradžių jį sukūrė Bjarne Stroustrup, Danijos informatikas, dar 1985 m. Šiame straipsnyje aptarsime skambutį pagal adresą ir skambinimo pagal nuorodą mechanizmą.

Kas yra funkcija?

Prieš pereidami prie tikrosios temos, turime suprasti, kokia funkcija yra C ++. Daugelis iš jūsų jau gali būti susipažinę su funkcijomis.







Funkcija iš esmės yra kodo dalis, kuri gali būti naudojama tam tikrai užduočiai atlikti. Funkcija daugiausia naudojama pasikartojančiam kodui C ++ programoje sumažinti. Jis priima įvestį kaip parametrus ir grąžina išvestį kaip grąžinimo vertę. Jei vieną kartą apibrėžiame funkciją, vėlesnėje programos dalyje galime ją iškviesti/naudoti kelis kartus. Tokiu būdu programoje išsaugome daug pasikartojančių kodų.



Kiekviena C ++ programa turi pagrindinę () funkciją. Pagrindinė () funkcija yra C ++ programos įėjimo taškas. Be pagrindinės () funkcijos, programuotojas gali apibrėžti tiek funkcijų, kiek nori.



Čia yra funkcijos apibrėžimo sintaksė:





„Return_type“ Funkcijos_pavadinimas(Įvesties parametrų sąrašas)

Funkcija C ++ gali priimti 0 ar daugiau įvesties parametrų, tuo tarpu ji gali grąžinti tik vieną grąžinimo vertę.

Kas yra Adresas?

C ++ yra dviejų tipų kintamieji (panašūs į C kalbą) - duomenų kintamasis ir adreso kintamasis. Adreso kintamasis naudojamas kito duomenų kintamojo adresui išsaugoti. Pavyzdžiui, apsvarstykite šį kodo fragmentą:



tarpti= 100;
tarpt *ptr= &i;

Čia pirmasis teiginys mums sako, kad kintamasis i yra duomenų kintamasis, ir jis saugo reikšmę 100. Antrame teiginyje deklaruojame rodyklės kintamąjį, t. Y. Ptr, ir inicijuojame jį su kintamojo i adresu.

Kas yra Nuoroda?

Nuoroda yra dar viena galinga C ++ kalbos funkcija. Apsvarstykite šį kodo fragmentą:

tarptį= 200;
tarpt &r=į;

Šiame pavyzdyje mes paskelbėme sveikąjį skaičių, t. Y., Tada paskelbėme atskaitos kintamąjį r, kuris inicijuojamas a reikšme. Taigi atskaitos kintamasis yra ne kas kita, kaip kito kintamojo slapyvardis.

Parametrų perdavimo metodai:

Yra trys parametrų perdavimo metodai C ++ kalba:

  1. Skambinti pagal vertę / Praleisti pagal vertę
  2. Skambinkite adresu / eikite pagal adresą
  3. Skambinkite pagal nuorodą / praeikite pagal nuorodą

Šiame straipsnyje aptariame - Skambinkite adresu ir Skambinkite pagal nuorodą.

Kas yra skambutis pagal adresą / leidimas pagal adresą?

Metodo „Skambinti pagal adresą“ / „Perduoti adresu“ atveju funkcijos argumentai perduodami kaip adresas. Skambintojo funkcija perduoda parametrų adresą. Rodyklės kintamieji naudojami funkcijos apibrėžime. Naudojant skambinimo pagal adresą metodą, funkcija gali pasiekti faktinius parametrus ir juos keisti. Kviečiame pagal adresą metodo pavyzdį pamatysime vėliau šio straipsnio skiltyje.

Kas yra skambutis pagal nuorodą / leidimas pagal nuorodą?

Naudojant metodą „Skambinti pagal nuorodą“ / „Perduoti pagal nuorodą“ funkcijos parametrai perduodami kaip nuoroda. Funkcijos apibrėžimo viduje prie faktinių parametrų galima prisijungti naudojant atskaitos kintamąjį.

Pavyzdžiai:

Dabar, kai suprantame parametrų perdavimo metodų sąvoką, pamatysime keletą programų pavyzdžių, kad suprastume parametrų perdavimo mechanizmą C ++:

  1. 1 pavyzdys-skambinti adresu (1)
  2. 2 pavyzdys-skambinti adresu (2)
  3. 3 pavyzdys. Skambinimas pagal nuorodą (1)
  4. 4 pavyzdys. Skambinimas pagal nuorodą (2)

Pateikiami du pirmieji pavyzdžiai, paaiškinantys, kaip skambučio pagal adresą metodas veikia C ++. Paskutiniuose dviejuose pavyzdžiuose paaiškinamas kvietimas pagal nuorodą.

1 pavyzdys-skambinti adresu (1)

Šiame pavyzdyje mes parodysime skambučio pagal adresą mechanizmą. Iš pagrindinės () funkcijos mes kviečiame sveiki () funkciją ir perduodame var. Funkcijos apibrėžime mes gauname var adresą rodyklės kintamajame, ty p. Funkcijos „labas“ viduje rodyklės pagalba var reikšmė keičiama į 200. Todėl po „hello“ () funkcijos iškvietimo var reikšmė pagrindinėje () funkcijoje keičiama į 200.

#įtraukti
naudojant vardų sritisvalandų;

tuštumaSveiki(tarpt *p)
{
kaina <<endl<< „Inside hello () funkcija:“ <<endl;
kaina << „Vertė *p =“ << *p<<endl;
*p= 200;
kaina << „Vertė *p =“ << *p<<endl;
kaina << „Išeinama iš sveikos () funkcijos“. <<endl;
}

tarptpagrindinis()
{
tarptkur= 100;
kaina << 'Var reikšmė pagrindinėje () funkcijoje =' <<kur<<endl;

Sveiki(&kur);

kaina <<endl<< 'Var reikšmė pagrindinėje () funkcijoje =' <<kur<<endl;

grįžti 0;
}

2 pavyzdys-skambinti adresu (2)

Tai dar vienas skambučio pagal adresą metodo pavyzdys. Šiame pavyzdyje mes paaiškinsime, kaip skambučio pagal adresą metodas gali būti naudojamas realaus gyvenimo problemai išspręsti. Pavyzdžiui, norime parašyti funkciją, kad sukeistume du kintamuosius. Jei mes naudojame skambučio pagal vertę mechanizmą, kad pakeistume du kintamuosius, faktiniai kintamieji nebus keičiami skambinančiojo funkcijoje. Tokiu atveju gali būti naudojamas skambinimo pagal adresą metodas. Šiame pavyzdyje tiek var_1 (& var_1), tiek var_2 (& var_2) adresą perduodame funkcijai mySwap (). Funkcijos mySwap () viduje mes keičiame šių dviejų kintamųjų reikšmes naudodami rodykles. Kaip matote žemiau esančioje išvestyje, tikroji šių kintamųjų vertė keičiama pagrindinėje () funkcijoje po to, kai vykdoma funkcija mySwap ().

#įtraukti
naudojant vardų sritisvalandų;

tuštumamano keitimas(tarpt *vptr_1,tarpt *vptr_2)
{
tarpttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

tarptpagrindinis()
{
tarptvar_1= 100;
tarptvar_2= 300;

kaina << 'Prieš iškviečiant funkciją mySwap (), reikšmė var_1:' <<var_1<<endl;
kaina << 'Prieš iškviečiant funkciją mySwap (), reikšmė var_2:' <<var_2<<endl<<endl;

kaina << „Skambinimas mySwap () - skambinkite adresu“. <<endl<<endl;
mano keitimas(&var_1,&var_2);

kaina << 'Paskambinus mySwap () funkcijai, var_1 reikšmė:' <<var_1<<endl;
kaina << 'Paskambinus mySwap () funkcijai, var_2 reikšmė:' <<var_2<<endl;

grįžti 0;
}

3 pavyzdys. Skambinimas pagal nuorodą (1)

Šiame pavyzdyje mes parodysime, kaip skambinimas pagal nuorodą veikia C ++. Funkcijos hello () apibrėžime reikšmė gaunama kaip atskaitos kintamasis (& p). Naudodamiesi atskaitos kintamuoju (ty p), mes galime pakeisti faktinio parametro (var) reikšmę pagrindinės () funkcijos viduje.

#įtraukti
naudojant vardų sritisvalandų;

tuštumaSveiki(tarpt &p)
{
kaina <<endl<< „Inside hello () funkcija:“ <<endl;
kaina << „P reikšmė“ <<p<<endl;
p= 200;
kaina << „P reikšmė“ <<p<<endl;
kaina << „Išeinama iš sveikos () funkcijos“. <<endl;
}

tarptpagrindinis()
{
tarptkur= 100;
kaina << 'Var reikšmė pagrindinėje () funkcijoje =' <<kur<<endl;

Sveiki(kur);

kaina <<endl<< 'Var reikšmė pagrindinėje () funkcijoje =' <<kur<<endl;

grįžti 0;
}

4 pavyzdys. Skambinimas pagal nuorodą (2)

Tai dar vienas skambučio su nuoroda pavyzdys. Šiame pavyzdyje mes parodysime, kaip skambinimas pagal nuorodą veikia „C ++“ naudojant realaus pasaulio pavyzdį. Funkcija mySwap () iškviečiama iš pagrindinės () funkcijos su šiais parametrais - var_1 ir var_2. Funkcijos mySwap () viduje mes gauname parametrus kaip atskaitos kintamuosius.

#įtraukti
naudojant vardų sritisvalandų;

tuštumamano keitimas(tarpt &vref_1,tarpt &vref_2)
{
tarpttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

tarptpagrindinis()
{
tarptvar_1= 100;
tarptvar_2= 300;

kaina << 'Prieš iškviečiant funkciją mySwap (), reikšmė var_1:' <<var_1<<endl;
kaina << 'Prieš iškviečiant funkciją mySwap (), reikšmė var_2:' <<var_2<<endl<<endl;

kaina << 'Skambinimas mySwap () - skambinti pagal nuorodą.' <<endl<<endl;
mano keitimas(var_1, var_2);

kaina << 'Paskambinus mySwap () funkcijai, var_1 reikšmė:' <<var_1<<endl;
kaina << 'Paskambinus mySwap () funkcijai, var_2 reikšmė:' <<var_2<<endl;

grįžti 0;
}

Išvada

Parametrų perdavimo metodų supratimas C ++ yra labai lemiamas. C programavimo kalba palaiko tik skambučio pagal vertę ir skambinimo pagal adresą. Tačiau „C ++“ palaiko skambinimą pagal nuorodą kartu su dviem ankstesniais mechanizmais. Šiame straipsnyje matėme keletą pavyzdžių, kaip suprasti skambučio pagal adresą ir kvietimo pagal nuorodą sąvoką. Skambinimas adresu yra labai galingas ir populiarus metodas įterptosiose domeno programose.