Klic C ++ po referenci: Uporaba kazalcev (z primeri)

V tej vadnici bomo spoznali klic C ++ s sklicevanjem na podajanje kazalcev kot argumenta na funkcijo s pomočjo primerov.

V vadnici C ++ Functions smo spoznali posredovanje argumentov funkciji. Ta uporabljena metoda se imenuje posredovanje po vrednosti, ker je posredovana dejanska vrednost.

Vendar obstaja še en način posredovanja argumentov funkciji, pri kateri se dejanske vrednosti argumentov ne posredujejo. Namesto tega se posreduje sklic na vrednosti.

Na primer

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

Opazite &v void func2(int &numRef). To pomeni, da kot parameter uporabljamo naslov spremenljivke.

Torej, ko prikličemo func2()funkcijo main()tako, da spremenljivko num posredujemo kot argument, dejansko posredujemo naslov spremenljivke num namesto vrednosti 5 .

C ++ Pass by Value vs Pass by Reference

Primer 1: podajanje mimo reference brez kazalcev

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

Izhod

 Pred zamenjavo a = 1 b = 2 Po zamenjavi a = 2 b = 1

V tem programu smo spremenljivki a in b poslali swap()funkciji. Upoštevajte definicijo funkcije,

 void swap(int &n1, int &n2)

Tu uporabljamo &označevanje, da bo funkcija sprejemala naslove kot svoje parametre.

Tako lahko prevajalnik ugotovi, da se referenca spremenljivk namesto dejanskih vrednosti prenese na parametre funkcije.

V swap()funkciji parametra funkcije n1 in n2 kažeta na isto vrednost kot spremenljivki a in b. Zamenjava torej poteka na dejanski vrednosti.

Isto nalogo lahko naredite s kazalci. Če želite izvedeti več o kazalcih, obiščite C ++ Kazalci.

Primer 2: podajanje mimo reference s kazalci

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

Izhod

 Pred zamenjavo a = 1 b = 2 Po zamenjavi a = 2 b = 1

Tu lahko vidimo, da je izhod enak prejšnjemu primeru. Opazite vrstico,

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

Tu se med spremenjenim klicem namesto spremenljivke posreduje naslov spremenljivke.

Ker se naslov posreduje namesto vrednosti, *je treba za dostop do vrednosti, shranjene na tem naslovu, uporabiti operater preusmeritve .

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

*n1in *n2poda vrednost, shranjeno na naslovih n1 in n2.

Ker n1 in n2 vsebujeta naslova a in b, se vse naredi *n1in * n2 bo spremenil dejanske vrednosti a in b.

Ko torej v main()funkciji natisnemo vrednosti a in b , se vrednosti spremenijo.

Zanimive Članki...