C ++ Call by Reference: gebruik van pointers (met voorbeelden)

In deze tutorial zullen we leren over C ++ call door te verwijzen naar pass pointers als argument voor de functie met behulp van voorbeelden.

In de C ++ Functions-zelfstudie hebben we geleerd over het doorgeven van argumenten aan een functie. Deze gebruikte methode wordt passerende waarde genoemd omdat de werkelijke waarde wordt doorgegeven.

Er is echter een andere manier om argumenten door te geven aan een functie waarbij de werkelijke waarden van argumenten niet worden doorgegeven. In plaats daarvan wordt de verwijzing naar waarden doorgegeven.

Bijvoorbeeld,

 // 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; )

Let op het &in void func2(int &numRef). Dit geeft aan dat we het adres van de variabele als onze parameter gebruiken.

Dus als we de func2()functie aanroepen main()door de variabele num als een argument door te geven, geven we eigenlijk het adres van de variabele num door in plaats van de waarde 5 .

C ++ Pass by Value vs. Pass by Reference

Voorbeeld 1: passeren door middel van referentie zonder verwijzingen

 #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; )

Uitvoer

 Voor het verwisselen van a = 1 b = 2 Na het verwisselen van a = 2 b = 1

In dit programma hebben we de variabelen a en b doorgegeven aan de swap()functie. Let op de functiedefinitie,

 void swap(int &n1, int &n2)

Hier gebruiken we om aan &te geven dat de functie adressen accepteert als zijn parameters.

Daarom kan de compiler identificeren dat in plaats van de werkelijke waarden de verwijzing naar de variabelen wordt doorgegeven aan functieparameters.

In de swap()functie wijzen de functieparameters n1 en n2 naar dezelfde waarde als respectievelijk de variabelen a en b. Daarom vindt de ruil plaats op basis van de werkelijke waarde.

Dezelfde taak kan worden gedaan met behulp van de aanwijzingen. Bezoek C ++ Pointers voor meer informatie over pointers.

Voorbeeld 2: passeren door middel van verwijzingen

 #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; )

Uitvoer

 Voor het verwisselen van a = 1 b = 2 Na het verwisselen van a = 2 b = 1

Hier kunnen we zien dat de uitvoer hetzelfde is als in het vorige voorbeeld. Let op de lijn,

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

Hier wordt het adres van de variabele doorgegeven tijdens de functieaanroep in plaats van de variabele.

Aangezien het adres wordt doorgegeven in plaats van de waarde, moet een dereferentie-operator *worden gebruikt om toegang te krijgen tot de waarde die in dat adres is opgeslagen.

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

*n1en *n2geeft de waarde opgeslagen op respectievelijk adres n1 en n2.

Aangezien n1 en n2 de adressen van a en b bevatten, wordt alles gedaan aan *n1en * n2 zal de werkelijke waarden van a en b veranderen.

Daarom worden main()de waarden gewijzigd wanneer we de waarden van a en b in de functie afdrukken .

Interessante artikelen...