Dynamická práce s pamětí
Doplňující informace
Přetypování ukazatelů
Přestože jsou ukazatele při deklaraci vztaženy ke konkrétnímu datovému typu, umožňuje jazyk C definovat také ukazatel (ukazatel na typ void
), který není vázán ke konkrétnímu typu. S takovým ukazatele pak lze některé operace provádět pouze při uvedení explicitní konverze. V praxi se tyto ukazatele používají převážně při deklaracích a definicích funkcí, které pracují s daty libovolných typů.
Příklad:
void *moje_pamet; ((int *)moje_pamet)++;
Funkce pro práci s pamětí
Všechny níže uvedené funkce jsou definovány v knihovně stdlib.h
. Při výpočtu velikosti bloku se v praxi hojně využívá operátor sizeof
.
Pokud není možné paměť alokovat, vrací níže uvedené funkce hodnotu NULL
(ukazatel na nulovou adresu).
void *malloc(size_t size);
Funkce alokuje paměť velikosti size
a vrátí ukazatel na danou oblast paměti.
void *calloc(size_t items, size_t size);
Funkce alokuje paměť pro items
prvků o velikosti size
(tedy items
*size
bytů), navíc tuto paměť vyplní nulami.
void *realloc(void* old, size_t size);
Funkce zajišťující změnu velikosti dříve alokovaného bloku paměti old
na velikost size
. Data původního bloku paměti budou zkopírována do nově alokovaného.
void free(void* block);
Funkce pro uvolnění paměti block
. Používá se vždy, když víme, že už danou paměť nebudeme v programu používat.