C ++ Call by Reference: Bruke pekere (med eksempler)

I denne opplæringen vil vi lære om C ++ -anrop ved å referere til pass-pekere som et argument til funksjonen ved hjelp av eksempler.

I C ++ Funksjoner-opplæringen lærte vi om å overføre argumenter til en funksjon. Denne metoden som kalles passerer verdi fordi den faktiske verdien passeres.

Det er imidlertid en annen måte å overføre argumenter til en funksjon der de faktiske verdiene til argumenter ikke blir overført. I stedet overføres referansen til verdier.

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

Legg merke til &i void func2(int &numRef). Dette indikerer at vi bruker adressen til variabelen som parameter.

Så når vi kaller func2()funksjonen inn main()ved å sende variabelen num som et argument, sender vi faktisk adressen til numvariabelen i stedet for verdien 5 .

C ++ Pass by Value vs. Pass by Reference

Eksempel 1: Passerer referanse uten pekepinner

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

Produksjon

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

I dette programmet passerte vi variablene a og b til swap()funksjonen. Legg merke til funksjonsdefinisjonen,

 void swap(int &n1, int &n2)

Her bruker vi for &å betegne at funksjonen aksepterer adresser som parametere.

Derfor kan kompilatoren identifisere at i stedet for faktiske verdier blir referansen til variablene overført til funksjonsparametere.

I swap()funksjonen peker funksjonsparametrene n1 og n2 på samme verdi som henholdsvis variablene a og b. Derfor foregår byttet på faktisk verdi.

Den samme oppgaven kan gjøres ved å bruke pekepinnene. For å lære mer om pekere, besøk C ++ pekere.

Eksempel 2: Passerer referanse ved hjelp av pekere

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

Produksjon

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

Her kan vi se at utgangen er den samme som forrige eksempel. Legg merke til linjen,

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

Her blir adressen til variabelen sendt under funksjonsanropet i stedet for variabelen.

Siden adressen sendes i stedet for verdi, må en operatør for referanse *brukes for å få tilgang til verdien som er lagret i den adressen.

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

*n1og *n2gir verdien lagret på henholdsvis adresse n1 og n2.

Siden n1 og n2 inneholder adressene til a og b, blir alt gjort for *n1og * n2 vil endre de faktiske verdiene til a og b.

Derfor, når vi skriver ut verdiene til a og b i main()funksjonen, endres verdiene.

Interessante artikler...