Shrnutí
V této lekci jste se naučili, že:
- Každá proměnná je uložená v paměti a má adresu.
&xje adresa proměnnéxa%pji vypíše. - Ukazatel je proměnná, ve které je uložená adresa:
int *p = &x;. Jeho typ říká, na co ukazuje:int *,double *,char *. *pje hodnota, na kteroupukazuje (dereference). Můžete ji číst,printf("%d\n", *p);, i měnit,*p = 20;. Bez hvězdičkyp = &y;změní, kam ukazatel ukazuje.- V deklaraci
*vytváří ukazatel. Před ukazatelem získá hodnotu z adresy. Mezi dvěma hodnotami násobí.&a*jsou protiklady. - Funkce s parametrem typu ukazatel může změnit proměnnou volajícího:
void pridej_bonus(int *body, int bonus)zavoláte jakopridej_bonus(&skore, 5). Zapomenutý&ve volání ohlásí překladač jako chybu, zapomenutou hvězdičku uvnitř funkce ale neohlásí nic. - Přes ukazatele může funkce prohodit dvě proměnné nebo předat víc výsledků najednou (výstupní parametry).
- Název pole je adresa jeho prvního prvku, takže funguje
int *p = cisla;ip[1]. Parametrint cisla[]je ukazatel, totéž coint *cisla. Proto funkce mění pole volajícího a potřebuje znát počet jeho prvků. NULLje ukazatel, který nikam neukazuje. Funkce, která vrací ukazatel, třeba adresu nalezeného prvku, vrátíNULL, když žádný takový prvek není. Ukazatel, který může býtNULL, před použitím zkontrolujte:if (p != NULL). Čtení přesNULLtady zastaví program chybouRuntimeError: unreachable.const int *cislaje ukazatel, přes který funkce jen čte. Na text v uvozovkách ukazuje ukazatelconst char *:const char *jmeno = "Anna";.
V další lekci, o strukturách, se naučíte seskupit hodnoty, které k sobě patří, třeba jméno žáka a jeho body, do jedné proměnné. Ukazatele se vám budou hodit i tam.
Jak psát:
Pokyny
Teď si vše procvičte. V poli body jsou výsledky testu a učitel ke každému přidá bonus. Nad main napište funkci pridej_bonus s parametry int *body, int pocet a int bonus. Funkce přičte bonus ke každému výsledku, ale žádný výsledek nesmí přesáhnout 100 bodů: co by bylo víc, nastaví na 100. Před cyklem ji zavolejte s bonusem 10. Program vypíše pod sebou 55, 82, 100, 48 a 76.
Pod funkci pridej_bonus napište funkci najdi_min_max s parametry const int *body, int pocet, int *nejmensi a int *nejvetsi. Přes oba ukazatele uloží nejmenší a největší výsledek, takže „vrátí“ dva výsledky najednou. Na začátku do obou uložte první prvek pole. Na konci main vytvořte dvě proměnné, předejte funkci jejich adresy a vypište je: Nejméně: 48, nejvíc: 100.
Začněte programovat zdarma
11/11