C ++

Apel C ++ după adresă și apel prin referință

Apel C ++ după adresă și apel prin referință

C ++ este un limbaj de programare flexibil de uz general. A fost inițial creat de Bjarne Stroustrup, un informatic danez, în 1985. C ++ acceptă metode de trecere cu trei parametri, i.e., apel după valoare, apel după adresă și apel prin referință. În acest articol, vom discuta despre apel prin adresă și apel prin mecanism de referință.

Ce este o funcție?

Înainte de a intra în subiectul real, trebuie să înțelegem care este funcția din C++. Este posibil ca mulți dintre voi să fie deja familiarizați cu funcțiile.

O funcție este practic o bucată de cod care poate fi utilizată pentru a efectua o anumită sarcină. O funcție este utilizată în principal pentru a reduce codul repetitiv într-un program C ++. Ia intrarea ca parametri și returnează ieșirea ca valoare returnată. Dacă definim funcția o singură dată, o putem apela / folosi de mai multe ori în ultima parte a programului nostru. În acest fel, economisim o mulțime de coduri repetitive în program.

Fiecare program C ++ va avea funcția „main ()”. Funcția „main ()” este punctul de intrare pentru un program C ++. În afară de funcția „main ()”, programatorul poate defini câte funcții dorește.

Iată sintaxa definirii unei funcții:

Return_type Function_Name (Lista parametrilor de intrare)

Funcția în C ++ poate accepta 0 sau mai mulți parametri de intrare, în timp ce poate returna o singură valoare returnată.

Ce este adresa?

Există două tipuri de variabile în C ++ (similar cu limbajul C) - Variabila de date și Variabila de adresă. Variabila adresă este utilizată pentru a stoca adresa altei variabile de date. De exemplu, să luăm în considerare următorul fragment de cod:

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

Aici, prima afirmație ne spune că variabila „i” este o variabilă de date și stochează valoarea 100. În a doua afirmație, declarăm o variabilă pointer, i.e. „Ptr” și inițializarea acestuia cu adresa variabilei „i”.

Ce este Referință?

Referința este o altă caracteristică puternică a limbajului C ++. Să luăm în considerare următorul fragment de cod:

int a = 200;
int & r = a;

În acest exemplu, am declarat un număr întreg, i.e. „A” și apoi declarată o variabilă de referință „r”, care este inițializată cu valoarea „a”. Deci, variabila de referință nu este altceva decât un alias al altei variabile.

Metode de trecere a parametrilor:

Există trei tipuri de metode de trecere a parametrilor în limbajul C ++:

  1. Apelați după valoare / Treceți după valoare
  2. Apelați după adresă / Treceți după adresă
  3. Apelați prin referință / Treceți prin referință

În acest articol, discutăm despre - Apel după adresă și Apel prin referință.

Ce este Apel după adresă / Trecere după adresă?

În cazul metodei Call by address / Pass by address, argumentele funcției sunt transmise ca adresă. Funcția apelant trece adresa parametrilor. Variabilele pointer sunt utilizate în definiția funcției. Cu ajutorul metodei Apel prin adresă, funcția poate accesa parametrii reali și îi poate modifica. Vom vedea un exemplu al metodei Apel prin adresă mai târziu în acest articol.

Ce este Apel prin referință / Trecere prin referință?

În metoda Apel prin referință / Treceți prin referință, parametrii funcției sunt trecuți ca referință. În cadrul definiției funcției, parametrii reali sunt accesați utilizând variabila de referință.

Exemple:

Acum, deoarece înțelegem conceptul de metode de trecere a parametrilor, vom vedea câteva exemple de programe pentru a înțelege mecanismul de trecere a parametrilor în C ++:

  1. Exemplu-1 - Apel după adresă (1)
  2. Exemplu-2 - Apel după adresă (2)
  3. Exemplu-3 - Apel prin referință (1)
  4. Exemplu-4 - Apel prin referință (2)

Primele două exemple sunt date pentru a explica modul în care funcționează metoda Apel prin adresă în C++. Ultimele două exemple sunt pentru a explica apelul prin conceptul de referință.

Exemplu-1 - Apel după adresă (1)

În acest exemplu, vom demonstra apelul prin mecanism de adresă. Din funcția „main ()”, apelăm funcția „hello ()” și trecem adresa „var”. În definiția funcției, primim adresa „var” într-o variabilă pointer, i.e., „P”. În interiorul funcției hello, valoarea „var” se schimbă la 200 cu ajutorul indicatorului. Prin urmare, valoarea „var” se schimbă la 200 în interiorul funcției „main ()” după apelul funcției „hello ()”.

#include
folosind spațiul de nume std;
void salut (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;
salut (& var);
cout << endl << "Value of var inside main() function = " << var << endl;
retur 0;

Exemplu-2 - Apel după adresă (2)

Acesta este un alt exemplu al metodei apelului prin adresă. În acest exemplu, vom explica cum metoda apelului prin adresă poate fi utilizată pentru a rezolva o problemă din viața reală. De exemplu, vrem să scriem o funcție pentru a schimba două variabile. Dacă folosim mecanismul apel prin valoare pentru a schimba două variabile, variabilele reale nu sunt schimbate în funcția apelantului. Metoda apelului prin adresă poate fi utilizată într-un astfel de scenariu. În acest exemplu, trecem adresa atât a var_1 (& var_1), cât și a var_2 (& var_2) la funcția „mySwap ()”. În interiorul funcției „mySwap ()”, schimbăm valorile acestor două variabile cu ajutorul indicatorilor. După cum puteți vedea în rezultatul de mai jos, valoarea reală a acestor variabile este schimbată în funcția „main ()” după executarea funcției „mySwap ()”.

#include
folosind spațiul de nume std;
anulează 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;
retur 0;

Exemplu-3 - Apel prin referință (1)

În acest exemplu, vom demonstra cum funcționează apelul prin referință în C++. În definiția funcției „hello ()”, valoarea este primită ca variabilă de referință (& p). Cu ajutorul variabilei de referință (i.e., p), putem schimba valoarea parametrului real (var) în interiorul funcției „main ()”.

#include
folosind spațiul de nume std;
void salut (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;
salut (var);
cout << endl << "Value of var inside main() function = " << var << endl;
retur 0;

Exemplu-4 - Apel prin referință (2)

Acesta este un alt exemplu de apel prin referință. În acest exemplu, vom demonstra cum funcționează apelul prin referință în C ++ cu ajutorul unui exemplu din lumea reală. Funcția „mySwap ()” este apelată din funcția „main ()” cu următorii parametri - var_1 și var_2. În interiorul funcției „mySwap ()”, primim parametrii ca variabile de referință.

#include
folosind spațiul de nume std;
void 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;
retur 0;

Concluzie

Înțelegerea metodelor de trecere a parametrilor în C++ este foarte crucial. Limbajul de programare C acceptă numai Apel după valoare și Apel după adresă. Dar, C ++ acceptă apelul prin referință împreună cu cele două mecanisme anterioare. În acest articol, am văzut câteva exemple de lucru pentru a înțelege conceptul de apel prin adresă și apel prin referință. Apelul după adresă este o metodă foarte puternică și populară în aplicațiile de domenii încorporate.

Tutorial Shadow of the Tomb Raider pentru Linux
Shadow of the Tomb Raider este a douăsprezecea completare a seriei Tomb Raider - o franciză de jocuri de acțiune-aventură creată de Eidos Montreal. Jo...
Cum se mărește FPS în Linux?
FPS înseamnă Cadre pe secundă. Sarcina FPS este de a măsura rata de cadre în redările video sau în performanțele jocului. În cuvinte simple, numărul d...
Cele mai bune jocuri Oculus App Lab
Dacă sunteți proprietarul căștilor Oculus, atunci trebuie să fiți informați despre încărcarea laterală. Încărcarea laterală este procesul de instalare...