C ++

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

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

C ++ yra lanksti bendrosios paskirties programavimo kalba. Iš pradžių jį sukūrė Bjarne Stroustrup, danų informatikas, dar 1985 m. C ++ palaiko trijų parametrų perdavimo metodus, t.e., skambinkite pagal vertę, skambinkite pagal adresą ir skambinkite pagal nuorodą. Šiame straipsnyje aptarsime skambučio pagal adresą ir skambučio pagal nuorodos mechanizmą.

Kas yra funkcija?

Prieš pereidami prie faktinės 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ą galima naudoti tam tikrai užduočiai atlikti. Funkcija daugiausia naudojama norint sumažinti pasikartojantį kodą C ++ programoje. Jis ima įvestį kaip parametrus ir grąžina išvestį kaip grąžinimo vertę. Jei funkciją apibrėžtume vieną kartą, vėlesnėje programos dalyje galime ją kelis kartus iškviesti / naudoti. Tokiu būdu programoje išsaugome daugybę pasikartojančių kodų.

Kiekviena C ++ programa turi atlikti funkciją „main ()“. „Main ()“ funkcija yra C ++ programos įvesties taškas. Be funkcijos „main ()“, programuotojas gali apibrėžti tiek funkcijų, kiek nori.

Čia yra funkcijos apibrėžimo sintaksė:

Return_type Function_Name (įvesties parametrų sąrašas)

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

Kas yra adresas?

Yra dviejų tipų kintamieji C ++ (panašūs į C kalbą) - duomenų kintamasis ir adreso kintamasis. Adreso kintamasis naudojamas saugoti kito duomenų kintamojo adresą. Pvz., Apsvarstykime šį kodo fragmentą:

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

Pirmasis teiginys mums sako, kad kintamasis „i“ yra duomenų kintamasis ir jis saugo 100 vertę. Antrame sakinyje deklaruojame rodyklės kintamąjį, t.e. „Ptr“ ir inicijuojant jį kintamojo „i“ adresu.

Kas yra nuoroda?

Nuoroda yra dar viena galinga C ++ kalbos ypatybė. Panagrinėkime šį kodo fragmentą:

int a = 200;
int & r = a;

Šiame pavyzdyje mes paskelbėme sveikąjį skaičių, t.e. „A“ ir paskelbė pamatinį kintamąjį „r“, kuris inicijuojamas su „a“ verte. Taigi, pamatinis kintamasis yra ne kas kitas, o kito kintamojo slapyvardis.

Parametrų perdavimo metodai:

C ++ kalba yra trijų tipų parametrų perdavimo metodai:

  1. Skambinkite pagal vertę / perduokite vertę
  2. Skambinkite pagal adresą / Pass by address
  3. Skambinkite pagal nuorodą / perduokite nuorodą

Šiame straipsnyje aptariame „Skambinti pagal adresą“ ir „Skambinti pagal nuorodą“.

Kas yra skambutis pagal adresą / perduoti adresą?

Taikant metodą „Call by address“ / „Pass by address“, funkcijos argumentai perduodami kaip adresas. Skambintojo funkcija perduoda parametrų adresą. Funkcijos apibrėžime naudojami žymeklio kintamieji. Naudodama „Call by address“ metodą, funkcija gali pasiekti faktinius parametrus ir juos modifikuoti. Vėliau šio straipsnio skyriuje pamatysime metodo „Skambinti pagal adresą“ pavyzdį.

Kas yra skambinimas pagal nuorodą / perdavimas pagal nuorodą?

„Call by reference“ / „Pass by reference“ metodo funkcijos parametrai perduodami kaip nuoroda. Funkcijos apibrėžime faktiniai parametrai pasiekiami naudojant atskaitos kintamąjį.

Pavyzdžiai:

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

  1. 1 pavyzdys - skambinkite pagal adresą (1)
  2. 2 pavyzdys - skambinkite pagal adresą (2)
  3. 3 pavyzdys - skambinkite pagal nuorodą (1)
  4. 4 pavyzdys - skambinkite pagal nuorodą (2)

Pateikti pirmieji du pavyzdžiai, paaiškinantys, kaip „Call by address“ metodas veikia C++. Paskutiniai du pavyzdžiai turi paaiškinti kvietimą remiantis nuoroda.

1 pavyzdys - skambinkite pagal adresą (1)

Šiame pavyzdyje mes parodysime skambutį pagal adreso mechanizmą. Iš funkcijos „main ()“ iškviečiame funkciją „labas ()“ ir perduodame „var“ adresą. Funkcijos apibrėžime gauname žymeklio kintamajame „var“ adresą, t.e., „P“. Sveikos funkcijos viduje rodyklės pagalba „var“ reikšmė keičiama į 200. Todėl funkcijos „main ()“ viduje po „labas ()“ funkcijos skambučio „var“ reikšmė keičiama į 200.

# įtraukti
naudojant vardų sritį std;
tuščias labas (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;
labas (& var);
cout << endl << "Value of var inside main() function = " << var << endl;
grąžinti 0;

2 pavyzdys - skambinkite pagal adresą (2)

Tai dar vienas skambučio pagal adresą metodo pavyzdys. Šiame pavyzdyje mes paaiškinsime, kaip skambučio pagal adresą metodą galima panaudoti sprendžiant realaus gyvenimo problemą. Pavyzdžiui, norime parašyti funkciją, kad sukeistume du kintamuosius. Jei naudosime skambučio pagal vertę mechanizmą, norėdami sukeisti du kintamuosius, faktiniai kintamieji nebus keičiami skambinančiojo funkcija. Pagal tokį scenarijų galima naudoti skambučio pagal adresą metodą. Šiame pavyzdyje tiek var_1 (& var_1), tiek var_2 (& var_2) adresą perduodame funkcijai „mySwap ()“. Funkcijoje „mySwap ()“ rodyklių pagalba keičiame šių dviejų kintamųjų reikšmes. Kaip matote žemiau pateiktame išvestyje, vykdant funkciją „mySwap ()“ tikroji šių kintamųjų reikšmė keičiama į funkciją „main ()“.

# įtraukti
naudojant vardų sritį std;
negaliojantis „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;
grąžinti 0;

3 pavyzdys - skambinkite pagal nuorodą (1)

Šiame pavyzdyje mes parodysime, kaip skambinimas pagal nuorodą veikia C++. Funkcijos „labas ()“ apibrėžime vertė gaunama kaip pamatinis kintamasis (& p). Pasitelkus pamatinį kintamąjį (t.e., p), mes galime pakeisti faktinio parametro (var) reikšmę funkcijos „main ()“ viduje.

# įtraukti
naudojant vardų sritį std;
tuščias labas (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;
labas (var);
cout << endl << "Value of var inside main() function = " << var << endl;
grąžinti 0;

4 pavyzdys - skambinkite pagal nuorodą (2)

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

# įtraukti
naudojant vardų sritį std;
negaliojantis „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;
grąžinti 0;

Išvada

Suprasti parametrų perdavimo metodus C++ yra labai svarbus. C programavimo kalba palaikomi tik skambučiai pagal vertę ir skambučiai pagal adresą. Tačiau C ++ palaiko „Call“ nuorodą kartu su dviem ankstesniais mechanizmais. Šiame straipsnyje mes matėme keletą veikiančių pavyzdžių, kaip suprasti skambučio pagal adresą ir skambučio pagal nuorodą sąvokas. Skambinimas pagal adresą yra labai galingas ir populiarus įterptųjų domenų programų metodas.

Geriausi „Linux“ žaidimų konsolių emuliatoriai
Šiame straipsnyje bus išvardyta populiari žaidimų konsolių emuliavimo programinė įranga, skirta „Linux“. „Emuliacija“ yra programinės įrangos suderina...
Geriausi „Linux“ žaidimų distristai 2021 m
„Linux“ operacinė sistema nuėjo ilgą kelią nuo originalios, paprastos, serverio išvaizdos. Ši OS pastaraisiais metais nepaprastai patobulėjo ir dabar ...
Kaip užfiksuoti ir perduoti savo žaidimų sesiją sistemoje „Linux“
Anksčiau žaidimai buvo laikomi tik pomėgiu, tačiau laikui bėgant lošimų pramonė labai augo technologijų ir žaidėjų skaičiaus atžvilgiu. Žaidimų audito...