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++
přeskočit seznam
// 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;> }> |
>
tcp vs udp
>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;> }> |
sloučit řazení v Javě
>
>
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;> }> |
je bílkovinný tuk
>
>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.