C ++ Call by Reference: Verwenden von Zeigern (mit Beispielen)

In diesem Tutorial lernen wir den C ++ - Aufruf anhand von Beispielen kennen, um anhand von Beispielen Zeiger als Argument an die Funktion zu übergeben.

Im Tutorial zu C ++ - Funktionen haben wir gelernt, wie Argumente an eine Funktion übergeben werden. Diese Methode wird als Wertübergabe bezeichnet, da der tatsächliche Wert übergeben wird.

Es gibt jedoch eine andere Möglichkeit, Argumente an eine Funktion zu übergeben, bei der die tatsächlichen Werte von Argumenten nicht übergeben werden. Stattdessen wird der Verweis auf Werte übergeben.

Beispielsweise,

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

Beachten Sie die &in void func2(int &numRef). Dies bedeutet, dass wir die Adresse der Variablen als unseren Parameter verwenden.

Wenn wir also die func2()Funktion aufrufen, indem wir main()die Variable num als Argument übergeben, übergeben wir tatsächlich die Adresse der Variablen num anstelle des Werts 5 .

C ++ Pass by Value vs. Pass by Reference

Beispiel 1: Referenzübergabe ohne Zeiger

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

Ausgabe

 Vor dem Tauschen von a = 1 b = 2 Nach dem Tauschen von a = 2 b = 1

In diesem Programm haben wir die Variablen a und b an die swap()Funktion übergeben. Beachten Sie die Funktionsdefinition,

 void swap(int &n1, int &n2)

Hier bezeichnen wir &, dass die Funktion Adressen als Parameter akzeptiert.

Somit kann der Compiler identifizieren, dass anstelle von tatsächlichen Werten die Referenz der Variablen an Funktionsparameter übergeben wird.

In der swap()Funktion zeigen die Funktionsparameter n1 und n2 auf den gleichen Wert wie die Variablen a bzw. b. Daher erfolgt der Austausch auf den Istwert.

Die gleiche Aufgabe kann mit den Zeigern erledigt werden. Informationen zu Zeigern finden Sie unter C ++ - Zeiger.

Beispiel 2: Referenzübergabe mit Zeigern

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

Ausgabe

 Vor dem Tauschen von a = 1 b = 2 Nach dem Tauschen von a = 2 b = 1

Hier sehen wir, dass die Ausgabe dieselbe ist wie im vorherigen Beispiel. Beachten Sie die Linie,

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

Hier wird die Adresse der Variablen während des Funktionsaufrufs und nicht während der Variablen übergeben.

Da die Adresse anstelle des Werts übergeben wird, muss ein Dereferenzierungsoperator *verwendet werden, um auf den in dieser Adresse gespeicherten Wert zuzugreifen.

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

*n1und *n2gibt den an der Adresse n1 bzw. n2 gespeicherten Wert an.

Da n1 und n2 die Adressen von a und b enthalten, wird alles getan, *n1und * n2 ändert die tatsächlichen Werte von a und b.

Wenn wir also die Werte von a und b in der main()Funktion drucken , werden die Werte geändert.

Interessante Beiträge...