Funkce C++ – Předat reference
Existuje několik způsobů, jak lze data (nebo proměnné) odeslat jako argument funkci. Dva z běžných jsou Passing by Value a Passing by Reference. Předání odkazem umožňuje funkci upravit proměnnou bez vytvoření kopie. Musíme deklarovat referenční proměnné. Paměťové umístění předávané proměnné a parametru je stejné. Proto se jakákoli změna parametru projeví také v proměnné uvnitř její rodičovské funkce. Tento článek se zaměřuje na diskusi o tom, jak předávat proměnné odkazem v C++.
Co je to Pass by Reference?
Když je proměnná předána jako odkaz na funkci, adresa proměnné je uložena v proměnné ukazatele uvnitř funkce. Proměnná uvnitř funkce je tedy aliasem předávané proměnné. Veškeré operace provedené s proměnnou uvnitř funkce se tedy projeví i ve volající funkci.
- Tato schopnost odrážet změny by mohla vrátit více než jednu hodnotu funkcí.
- Také funkce void by mohla technicky vracet hodnotu/y pomocí této metody.
The & Operátor (adresa) označuje hodnoty předávané předávaným odkazem ve funkci. Níže je uveden program C++ pro implementaci pass-by-reference:
C++
// C++ program to implement> // pass-by-reference> #include> using> namespace> std;> > void> f(> int> & x)> {> > x--;> }> > // Driver code> int> main()> {> > int> a = 5;> > cout < < a < < endl;> > f(a);> > cout < < a < < endl;> }> |
Výstup
5 4
Vysvětlení:
- Nejprve je funkce definována s návratovým datovým typem void a přebírá hodnotu odkazem (jak je označeno & znak adresy ve formálních parametrech).
- Funkce sníží hodnotu svého formálního parametru o 1.
- Poté, uvnitř hlavní funkce, celočíselná proměnná pojmenovaná A je inicializována hodnotou 5.
- Hodnota „a“ je vytištěna na konzole. Zavolá se funkce f() a proměnná se předá jako argument.
- Uvnitř funkce se hodnota proměnné sníží o 1.
- Po návratu z funkce se opět zobrazí hodnota proměnné, která se ukázala být o 1 menší než původní hodnota.
Změny proměnné předané odkazem na funkci se tedy projeví ve volající funkci.
Swap funkce pomocí Pass-By-Reference
Funkce swap zamění hodnoty dvou proměnných, které obdrží jako argumenty. Níže je uveden program C++ pro záměnu hodnot dvou proměnných pomocí pass-by-reference.
C++
// C++ program to swap the values> // of two variables using> // pass-by-reference> #include> > // Prototype of the function> void> swap(> int> &,> int> &);> > // Driver code> int> main()> {> > int> x, y;> > > // Inputting two variables> > printf> (> 'Enter the value of x and y
'> );> > scanf> (> '%d%d'> , &x, &y);> > > // Displaying their values before swapping> > printf> (> 'Before Swapping
x = %d
y = %d
'> ,> > x, y);> > > // Calling the function & sending variable> > // values as argument> > swap(x, y);> > > // Displaying their values after swapping> > printf> (> 'After Swapping
x = %d
y = %d
'> ,> > x, y);> > return> 0;> }> > // Function uses pass by reference method> // to swap passed variable values> void> swap(> int> &a,> int> &b)> {> > int> temp;> > > temp = b;> > b = a;> > a = temp;> }> |
Výstup:
Vysvětlení:
- Nejprve je definován prototyp funkce (volitelné, pokud je funkce definována před hlavní funkcí).
- Uvnitř hlavní funkce jsou hodnoty dvou proměnných převzaty jako vstup od uživatele.
- Hodnoty před voláním funkce swap jsou vytištěny na konzole.
- Poté jsou hodnoty předány jako argument funkci swap.
- Funkce swap využívá call-by-reference a obsahuje kód pro záměnu dvou proměnných.
- Po dokončení funkce se hodnota dvou proměnných zobrazí v hlavní funkci (po volání swap).
- Prohozené hodnoty se zobrazí na obrazovce.
Mít reference s ukazateli
Je také možné předat adresu proměnné z volající funkce a použít je jako ukazatel uvnitř volané funkce. To umožňuje trochu explicitněji ve změně hodnot proměnných ve funkci.
Níže je uveden program C++ pro implementaci pass-by-reference s ukazateli:
C++
// C++ program to implement> // pass-by-reference with> // pointers> #include> using> namespace> std;> > void> f(> int> *x)> {> > *x = *x - 1;> }> > // Driver code> int> main()> {> > int> a = 5;> > cout < < a < < endl;> > f(&a);> > cout < < a < < endl;> }> |
Výstup
5 4
Vysvětlení:
- Nejprve je funkce definována s návratovým datovým typem void a nabývá hodnoty jako ukazatele (jak je označeno * hvězdička podepsat formální parametry).
- Funkce sníží hodnotu svého formálního parametru o 1.
- Poté se uvnitř hlavní funkce inicializuje celočíselná proměnná s názvem „a“ s hodnotou 5.
- Poté se zobrazí tato hodnota. Funkce je volána a adresa proměnné je předána jako argument.
- Uvnitř funkce se hodnota proměnné ukazatele sníží o 1.
- Po návratu z funkce se opět zobrazí hodnota proměnné, která se ukázala být o 1 menší než původní hodnota.