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: 11

Porovnejte 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 &, tedy pridejBod(skore), skončí chybou no matching function for call to 'pridejBod' s poznámkou candidate 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á skore zůstane 10.

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

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

7/10