Puntatori in C Un puntatore è una variabile che contiene un indirizzo di memoria. Quando una variabile contiene l’indirizzo di un’altra variabile, si dice che la prima punta alla seconda. I puntatori sono utili per: - le funzioni (passaggio per referenza, che permette la modifica degli argomenti in input); - l’allocazione dinamica della memoria (definizione di strutture dati di dimensione variabile)
Definizione e operazioni sui puntatori Definizione di un puntatore che punta a locazioni di memoria contenenti un dato tipo di dati: tipo *nome_variabile Es. int *x; char *y; & (operatore unario che restituisce l’indirizzo di memoria dell’operando) Es. la variabile n sia allocata all’indirizzo Dopo l’esecuzione dell’istruzione: x=&n il valore di x è 1000.
* (operatore unario che restituisce il valore della locazione di memoria puntata dall’operando). Es. la variabile n ha come valore 1000, e la locazione 1000 contiene il valore 555. Dopo l’esecuzione dell’istruzione: y=*x; Il valore di y è 555. ATTENZIONE * è il complemento di &. void main(void){ tipo x,y; tipo *p; è equivalente a y=x; p=&x; } y=*p; }
I puntatori possono essere confrontati tra di loro; Allocazione dinamica della memoria: malloc ()alloca porzioni contigue di memoria void *malloc(numero di byte) (°) e restituisce l’indirizzo della locazione iniziale free() libera porzioni di memoria void free(void *p) (°) tipo *funzione(argomenti) Definisce una funzione che restituisce come output un puntatore al tipo dato. Es. char *p; p=malloc(1000); alloca 1000 byte in sequenza e p punta alla locazione iniziale.