C ++ Opkald via reference: Brug af markører (med eksempler)

I denne vejledning lærer vi om C ++ - kald ved henvisning til videregivelsespegere som et argument til funktionen ved hjælp af eksempler.

I C ++ funktioner-vejledningen lærte vi om at videregive argumenter til en funktion. Denne anvendte metode kaldes forbipasserende værdi, fordi den aktuelle værdi overføres.

Der er dog en anden måde at overføre argumenter til en funktion, hvor de faktiske værdier af argumenter ikke overføres. I stedet overføres henvisningen til værdier.

For eksempel,

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

Bemærk &i void func2(int &numRef). Dette angiver, at vi bruger variabelens adresse som vores parameter.

Så når vi kalder func2()funktionen ind main()ved at sende variablen num som et argument, sender vi faktisk adressen til num-variablen i stedet for værdien 5 .

C ++ Pass by Value vs. Pass by Reference

Eksempel 1: At videregive uden reference

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

Produktion

 Før bytte a = 1 b = 2 Efter bytte a = 2 b = 1

I dette program sendte vi variablerne a og b til swap()funktionen. Bemærk funktionsdefinitionen,

 void swap(int &n1, int &n2)

Her bruger vi &til at betegne, at funktionen accepterer adresser som parametre.

Derfor kan kompilatoren identificere, at i stedet for faktiske værdier overføres variablenes reference til funktionsparametre.

I swap()funktionen peger funktionsparametrene n1 og n2 på den samme værdi som henholdsvis variablerne a og b. Derfor finder byttet sted på den faktiske værdi.

Den samme opgave kan udføres ved hjælp af markørerne. Hvis du vil lære mere om markører, skal du besøge C ++ pointer.

Eksempel 2: Videregivelse ved hjælp af henvisninger

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

Produktion

 Før bytte a = 1 b = 2 Efter bytte a = 2 b = 1

Her kan vi se, at output er det samme som det foregående eksempel. Bemærk linjen,

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

Her sendes variabelens adresse under funktionsopkaldet snarere end variablen.

Da adressen sendes i stedet for værdien, skal en operatør til afbrydelse *bruges til at få adgang til den værdi, der er gemt i den adresse.

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

*n1og *n2giver den værdi, der er lagret på henholdsvis adressen n1 og n2.

Da n1 og n2 indeholder adresserne til a og b, gøres alt for, *n1og * n2 ændrer de faktiske værdier for a og b.

Derfor ændres værdierne, når vi udskriver værdierne for a og b i main()funktionen.

Interessante artikler...