C ++ kõne viitena: osutite kasutamine (koos näidetega)

Selles õppetükis õpime näidete abil C ++ kõnet funktsiooni argumendina viitena edastuskursoritele.

C ++ funktsioonide õpetuses õppisime argumentide edastamist funktsioonile. Seda kasutatud meetodit nimetatakse väärtuse edastamiseks, kuna tegelik väärtus on edasi antud.

Siiski on veel üks võimalus argumentide edastamiseks funktsioonile, kus argumentide tegelikke väärtusi ei edastata. Selle asemel edastatakse viide väärtustele.

Näiteks,

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

Märka &sisse void func2(int &numRef). See tähendab, et me kasutame parameetrina muutuja aadressi.

Niisiis, kui kutsume func2()funktsiooni main(), edastades argumendina muutuja num, edastame väärtuse 5 asemel tegelikult muutuja num aadressi .

C ++ Pass by Value vs Pass by Reference

Näide 1: Viiteta läbimine ilma näpunäideteta

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

Väljund

 Enne a = 1 vahetamist b = 2 Pärast a = 2 vahetamist b = 1

Selles programmis edastasime muutujad a ja b swap()funktsioonile. Pange tähele funktsiooni määratlust,

 void swap(int &n1, int &n2)

Siinkohal &tähistame, et funktsioon aktsepteerib parameetritena aadresse.

Seega saab kompilaator tuvastada, et tegelike väärtuste asemel edastatakse muutujate viide funktsiooni parameetritele.

In swap()funktsiooni funktsioon parameetrite N1 ja n2 osutavad sama väärtusega kui muutujad a ja b on vastavalt. Seega toimub vahetamine tegeliku väärtuse järgi.

Sama ülesande saab teha ka osutite abil. Näpunäidete kohta lisateabe saamiseks külastage C ++ pointereid.

Näide 2: Viidete edastamine osutite abil

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

Väljund

 Enne a = 1 vahetamist b = 2 Pärast a = 2 vahetamist b = 1

Siin näeme, et väljund on sama mis eelmises näites. Pange tähele joont,

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

Siin edastatakse muutuja aadress funktsiooni väljakutse ajal, mitte muutuja.

Kuna aadressi edastatakse väärtuse asemel, *tuleb sellele aadressile salvestatud väärtusele juurdepääsemiseks kasutada hälbeoperaatorit .

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

*n1ja *n2annab vastavalt aadressidele n1 ja n2 salvestatud väärtuse.

Kuna n1 ja n2 sisaldavad a ja b aadresse, tehakse kõik *n1ja * n2 muudab a ja b tegelikke väärtusi.

Seega, kui printime main()funktsioonis a ja b väärtused, siis väärtusi muudetakse.

Huvitavad Artiklid...