C ++ Hívás referencia alapján: Mutatók használata (példákkal)

Ebben az oktatóanyagban a C ++ hívásról ismerhetjük meg a hivatkozások átadását, a hivatkozások átadását mint a függvény argumentumát példák segítségével.

A C ++ Functions oktatóanyagban megtudtuk, hogyan lehet argumentumokat átadni egy függvénynek. Ezt az alkalmazott módszert úgy hívják, hogy értéket adja át, mert a tényleges értéket átadják.

Van azonban egy másik módja az argumentumok átadásának egy függvény számára, ahol az argumentumok tényleges értékeit nem adják át. Ehelyett átadják az értékekre való hivatkozást.

Például,

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

Figyelje meg a &be void func2(int &numRef). Ez azt jelzi, hogy paraméterünkként a változó címét használjuk.

Tehát, amikor a num változó argumentumként való megadásával hívjuk be a func2()függvényt main(), akkor tulajdonképpen a num változó címét adjuk át az 5 érték helyett .

C ++ Pass by Value vs. Pass by Reference

1. példa: Hivatkozás útja mutatók nélkül

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

Kimenet

 Az a = 1 cseréje előtt b = 2 az a = 2 cseréje után b = 1

Ebben a programban az a és b változókat adtuk át a swap()függvénynek. Figyelje meg a függvény definícióját,

 void swap(int &n1, int &n2)

Itt azt &jelöljük, hogy a függvény a címeket fogadja el paraméterként.

Így a fordító azonosíthatja, hogy a tényleges értékek helyett a változók referenciáját adják át a függvényparamétereknek.

A swap()függvényben az n1 és az n2 függvényparaméterek ugyanarra az értékre mutatnak, mint az a, illetve a b változók. Ezért a csere a tényleges értéken történik.

Ugyanez a feladat elvégezhető a mutatók segítségével. A mutatók megismeréséhez keresse fel a C ++ mutatókat.

2. példa: Hivatkozás útja mutatók segítségével

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

Kimenet

 Az a = 1 cseréje előtt b = 2 az a = 2 cseréje után b = 1

Itt láthatjuk, hogy a kimenet megegyezik az előző példával. Figyelje meg a sort,

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

Itt a változó címét a függvényhívás során adjuk át, nem pedig a változót.

Mivel az érték helyett a címet adják meg, egy dereference operátort *kell használni a címben tárolt érték eléréséhez.

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

*n1és *n2megadja az n1 és n2 címen tárolt értéket.

Mivel n1 és n2 tartalmazzák az a és b címét, bármi megtörténik, *n1és * n2 megváltoztatja a és b tényleges értékét.

Ezért, amikor a függvényben kinyomtatjuk a és b main()értékeit, az értékek megváltoznak.

érdekes cikkek...