Předávání parametrů hodnotou a odkazem
V C++ máme dva základní způsoby, jak předat parametry funkci:
- Předání hodnotou (pass by value)
- Předání odkazem (pass by reference)
Při předání hodnotou se vytvoří kopie proměnné. Změny uvnitř funkce tedy neovlivní původní proměnnou. Toto jsme používali doposud:
void zmenCisloHodnotou(int cislo) {
cislo = 42; // Změní pouze lokální kopii
}
int x = 10;
zmenCisloHodnotou(x);
std::cout << x; // Vypíše: 10 (x se nezměnilo)
Při předání odkazem funkce pracuje přímo s původní proměnnou. Změny uvnitř funkce tedy ovlivní původní proměnnou:
void zmenCisloOdkazem(int& cislo) {
cislo = 42; // Změní původní proměnnou
}
int x = 10;
zmenCisloOdkazem(x);
std::cout << x; // Vypíše: 42 (x se změnilo)
Předání odkazem je užitečné když:
- Chceme, aby funkce mohla změnit původní proměnnou
- Chceme předat velké objekty bez vytváření kopie (efektivnější)
Pokud nechceme, aby funkce mohla měnit předanou proměnnou, ale chceme se vyhnout kopírování, můžeme použít konstantní odkaz (const&
):
void vypisVektor(const std::vector& vektor) {
// vektor nelze změnit, ale neprovede se jeho kopie
for(int cislo : vektor) {
std::cout << cislo << " ";
}
}
Pokyny
Podívejte se na výstup programu. Proč se hodnota proměnné a
nezměnila, ale hodnota b
ano?
Upravte funkci zdvojnasob
tak, aby také dokázala změnit původní hodnotu. Nápověda: Použijte ukazatel nebo referenci.
Začněte programovat zdarma
2/5