Proměnná typu ukazatel

Adresa je hodnota stejně jako číslo, a proto ji můžete uložit do proměnné. Proměnné, ve které je uložená adresa, se říká ukazatel: ukazuje na jinou proměnnou, tedy říká, kde ta proměnná je.

int vek = 15;
int *p = &vek;

Druhý řádek čtěte takto: „p je ukazatel na int a obsahuje adresu proměnné vek“. Říká se, že p ukazuje na vek. Hvězdička v deklaraci říká, že p je ukazatel, a int před ní určuje, jaká hodnota je v přihrádce, na kterou ukazuje.

Dvě přihrádky v paměti. V přihrádce proměnné p s adresou 0xfff8 je adresa 0xfffc. Šipka z ní vede do přihrádky proměnné vek s adresou 0xfffc, ve které je 15. p ukazuje na vek.

Typ proměnné p je tedy int *, „ukazatel na int“. Ukazatel na double má typ double * a ukazatel na char typ char *. Krátký název p (podle anglického slova pro ukazatel) se v malých příkladech používá často. Mezery kolem hvězdičky jazyku C nevadí: int *p, int* p i int * p znamenají totéž. V tomto kurzu píšeme int *p.

I ukazatel je proměnná, takže má svou vlastní přihrádku se svou vlastní adresou. V jeho přihrádce ale není 15, nýbrž adresa proměnné vek. Když p vypíšete pomocí %p, dostanete stejné číslo jako u &vek:

#include <stdio.h>

int main(void) {
    int vek = 15;
    int *p = &vek;
    printf("Adresa vek: %p\n", &vek);
    printf("Hodnota p: %p\n", p);
    return 0;
}

Tento kód vypíše:

Adresa vek: 0xfffc
Hodnota p: 0xfffc

Časté chyby:

  • int *p = vek; bez & skončí chybou incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'; take the address with &. Do ukazatele patří adresa, ne číslo jako 15. Konec hlášky vám dokonce radí, jak chybu opravit: vzít adresu pomocí &.
  • Typ ukazatele musí odpovídat typu proměnné. Po double cena = 9.5; skončí řádek int *p = &cena; chybou incompatible pointer types initializing 'int *' with an expression of type 'double *'. Adresa proměnné typu double patří do ukazatele typu double *.

Pokyny

Pod proměnnou cena vytvořte ukazatel p typu int *, který ukazuje na proměnnou teplota.

Na konec programu (před return 0;) vypište hodnotu ukazatele p pomocí %p: text Hodnota p: a p. Je to stejná adresa jako na prvním řádku výpisu.

Pod ukazatel p vytvořte druhý ukazatel q, který ukazuje na proměnnou cena (q je v abecedě za p, a proto se tak druhý ukazatel často jmenuje). Jeho typ zvolte sami: jaký druh hodnoty je v proměnné cena? Pak na konec programu (před return 0;) vypište Hodnota q: a q.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

2/11