logo

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++

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:

C++ - Swap funkce pomocí Pass-By-Reference

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.