Změna přes ukazatel

*p neslouží jen ke čtení. Zastupuje samotnou proměnnou, takže mu můžete i přiřadit hodnotu. *p = 20; uloží 20 do přihrádky, na kterou p ukazuje:

#include <stdio.h>

int main(void) {
    int vek = 15;
    int *p = &vek;
    *p = 20;
    printf("vek: %d\n", vek);
    *p += 1;
    printf("vek: %d\n", vek);
    return 0;
}

Tento kód vypíše:

vek: 20
vek: 21

V programu nikde není vek = ..., a přesto se vek změnil. vek a *p jsou dvě cesty k téže přihrádce. *p proto funguje všude, kde by fungoval vek: *p = *p * 2;, *p -= 3;.

Pozor na ++: pište *p += 1; nebo (*p)++;. Bez závorek přičte *p++; jedničku k samotnému ukazateli (posune ho na další přihrádku) a vek nezmění. Žádná chyba vás na to neupozorní.

Bez hvězdičky měníte samotný ukazatel, tedy to, kam ukazuje. I to se hodí. V této hře ukazatel hrac ukazuje vždy na body hráče, který je právě na tahu:

int anna = 0;
int petr = 0;
int *hrac = &anna;
*hrac += 5;
hrac = &petr;
*hrac += 3;
printf("Anna: %d, Petr: %d\n", anna, petr);

Tento kód vypíše:

Anna: 5, Petr: 3

hrac = &petr; bez hvězdičky přesměruje ukazatel hrac na jinou proměnnou. *hrac += 3; s hvězdičkou změní proměnnou, na kterou teď ukazuje, tedy petr.

Zapamatujte si: *p = ... s hvězdičkou mění hodnotu v přihrádce. p = ... bez hvězdičky mění, kam p ukazuje, a potřebuje adresu. Když v *p = 20; hvězdičku zapomenete, skončí řádek p = 20; chybou incompatible integer to pointer conversion assigning to 'int *' from 'int': zkoušíte uložit číslo 20 do samotného ukazatele.

Pokyny

Pod proměnné (nad printf) vytvořte ukazatel p, který ukazuje na proměnnou zivoty. Pod něj přidejte příkaz, který přes ukazatel nastaví životy na 5: *p = 5;. Nepište zivoty = 5;. Program vypíše Životy: 5, štíty: 1.

Pod něj (pořád nad printf) přes ukazatel přičtěte další 2 životy. Program vypíše Životy: 7, štíty: 1.

Teď má ukazatel ukazovat na štíty. Na konec programu (před return 0;) přesměrujte p na proměnnou stity.

Pod to přes ukazatel přičtěte 1 štít a znovu stejně vypište řádek se životy a štíty. Program vypíše Životy: 7, štíty: 1 a pod tím Životy: 7, štíty: 2.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

4/11