Apel C ++ prin referință: folosirea pointerelor (cu exemple)

În acest tutorial, vom afla despre apelul C ++ prin referință la trecerea indicatorilor ca argument al funcției cu ajutorul exemplelor.

În tutorialul Funcții C ++, am aflat despre trecerea argumentelor către o funcție. Această metodă utilizată se numește trecere prin valoare, deoarece valoarea reală este trecută.

Cu toate acestea, există un alt mod de a transmite argumente unei funcții în care valorile reale ale argumentelor nu sunt transmise. În schimb, trimiterea la valori este trecută.

De exemplu,

 // function that takes value as parameter void func1(int numVal) ( // code ) // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) ( // code ) int main() ( int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; )

Observați &în void func2(int &numRef). Aceasta indică faptul că folosim adresa variabilei ca parametru.

Deci, când apelăm func2()funcția în main()trecând variabila num ca argument, trecem de fapt adresa variabilei num în loc de valoarea 5 .

C ++ Pass by Value vs. Pass by Reference

Exemplul 1: Trecerea prin referință fără indicatori

 #include using namespace std; // function definition to swap values void swap(int &n1, int &n2) ( int temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )

Ieșire

 Înainte de a schimba a = 1 b = 2 După schimbarea a = 2 b = 1

În acest program, am trecut variabilele a și b swap()funcției. Observați definiția funcției,

 void swap(int &n1, int &n2)

Aici, folosim &pentru a indica faptul că funcția va accepta adresele ca parametri ai săi.

Prin urmare, compilatorul poate identifica faptul că, în loc de valori reale, referința variabilelor este transmisă parametrilor funcției.

În swap()funcție, parametrii funcției n1 și n2 indică aceeași valoare ca variabilele a și respectiv b. Prin urmare, schimbul are loc pe valoarea reală.

Aceeași sarcină poate fi realizată folosind pointerele. Pentru a afla mai multe despre indicii, accesați indicatorii C ++.

Exemplul 2: Trecerea prin referință folosind pointeri

 #include using namespace std; // function prototype with pointer as parameters void swap(int*, int*); int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; ) // function definition to swap numbers void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )

Ieșire

 Înainte de a schimba a = 1 b = 2 După schimbarea a = 2 b = 1

Aici, putem vedea că ieșirea este aceeași cu exemplul anterior. Observați linia,

 // &a is address of a // &b is address of b swap(&a, &b);

Aici, adresa variabilei este transmisă în timpul apelului funcțional, mai degrabă decât variabila.

Deoarece adresa este transmisă în loc de valoare, *trebuie utilizat un operator de dereferință pentru a accesa valoarea stocată în acea adresă.

 temp = *n1; *n1 = *n2; *n2 = temp; 

*n1și *n2dă valoarea stocată la adresa n1 și respectiv n2.

Deoarece n1 și n2 conțin adresele lui a și b, orice se face către *n1și * n2 va schimba valorile reale ale lui a și b.

Prin urmare, atunci când tipărim valorile lui a și b în main()funcție, valorile sunt schimbate.

Articole interesante...