Ukazatel jako parametr
Funkce může dostat i ukazatel. Pak má adresu proměnné a přes * ji může změnit. Takhle předávají proměnné funkcím programy v jazyce C, ze kterého C++ vzniklo a který reference nemá. Proto tento zápis uvidíte ve starším kódu a v mnoha knihovnách:
#include <iostream>
void pridejBod(int* body) {
*body = *body + 1;
}
int main() {
int skore = 10;
pridejBod(&skore);
std::cout << "Skóre: " << skore << std::endl;
return 0;
}Tento kód vypíše:
Skóre: 11Porovnejte to s funkcí pridejBod z první stránky lekce, která měla parametr int& body. Teď má parametr typ int*, uvnitř funkce před ním píšete * a ve volání předáváte adresu: pridejBod(&skore). Výhodou je, že už podle volání poznáte, že funkce může proměnnou skore změnit. Nevýhodou je víc znaků a víc příležitostí k chybě.
Časté chyby:
- Volání bez
&, tedypridejBod(skore), skončí chybouno matching function for call to 'pridejBod's poznámkoucandidate function not viable: no known conversion from 'int' to 'int *' for 1st argument; take the address of the argument with &. Překladač vám dokonce radí, co udělat: předat adresu pomocí&. - Když naopak funkce chce referenci a vy jí předáte adresu, končí poznámka slovy
remove &, tedy „odstraňte&“. - Když uvnitř funkce zapomenete hvězdičku a napíšete
body = body + 1;, program se přeloží bez chyby, ale změní se adresa uložená v ukazateli, a ne skóre. Proměnnáskorezůstane10.
Jak psát:
Pokyny
Ve hře si můžete za 100 mincí koupit život. Místo prvního komentáře napište funkci kupZivot se dvěma parametry typu int*: ukazateli zivoty a mince. Funkce přes ukazatele odečte 100 mincí a přičte jeden život.
V main zavolejte funkci kupZivot místo komentáře před prvním výpisem a předejte jí adresy proměnných zivoty a mince. Program vypíše dvakrát Životy: 4, mince: 50.
Život jde koupit, jen když má hráč aspoň 100 mincí. Přidejte do funkce podmínku: když má hráč méně než 100 mincí, funkce nic nezmění a vypíše Málo mincí. Pak zavolejte kupZivot podruhé, místo posledního komentáře. Program vypíše Životy: 4, mince: 50, pod tím Málo mincí a pak znovu Životy: 4, mince: 50.
Začněte programovat zdarma
7/10