Lo spazio di allocazione per le variabili ha di norma una dimensione fissata, dobbiamo prevedere però una cardinalità grande abbastanza per tutte le esecuzioni del programma
Il C supporta l’allocazione dinamica della memoria: possiamo allocare la memoria durante l’esecuzione del programma e assegnare l’indirizzo del blocco di memoria allocato da un puntatore. Questo permette di creare strutture dati la cui dimensione varia durante l’esecuzione, in funzione delle necessità
Il file <stdlib.h> dichiara tre funzioni per l’allocazione dinamica della memoria:
void *malloc(size_t size);
alloca un blocco di memoria di size bytes senza inizializzarlo e restituisce il puntatore al blocco
void *calloc(size_t nelements, size_t elementSize);
alloca un blocco di memoria di nelements * elementSize bytes, lo inizializza a 0 e restituisce il puntatore al blocco
void *realloc(void *pointer, size_t size);
cambia la dimensione del blocco di memoria precedentemente allocato puntato da pointer e restituisce il puntatore ad una zona di memoria di dimensione size, che contiene gli stessi dati della vecchia regione indirizzata da pointer (troncata alla fine nel caso la nuova dimensione sia minore di quella precedente)
Le variabili dichiarate all’interno di funzioni sono dette locali e sono visibili solo all’interno della funzione in cui sono dichiarate. Tali variabili sono dette automatiche, perchè vengono allocate in memoria a tempo di esecuzione (dell’istruzione dichiarativa) e deallocate al termine del blocco in cui sono dichiarate
Le variabili dichiarate esternamente alle funzioni sono dette globali e sono visibili a tutte le funzioni la cui definizione segue la dichiarazione della variabile nel file sorgente. Tali variabili sono dette statiche, perchè la loro allocazione in memoria avviene all’atto del caricamento del programma, e la loro deallocazione al termine del programma
Le variabili globali possono essere usate per scambiare informazioni tra sottoprogrammi