Concetti Chiave
- La dereferenziazione consente di accedere e modificare il contenuto di una variabile tramite il suo indirizzo di memoria.
- L'uso di puntatori non inizializzati o inizializzati a NULL può portare a comportamenti non definiti.
- Per dereferenziare un puntatore a void, è necessario effettuare un cast al tipo di dato corretto.
- I puntatori a const permettono di leggere, ma non modificare, il contenuto della memoria a cui puntano, a meno che non si usi un puntatore non const.
- Un puntatore read-only può essere inizializzato e usato per modificare il contenuto della memoria, ma il puntatore stesso non può essere riassegnato.
Come dereferenziare con un puntatore
Per accedere al puntatore di utilizza l’operatore di dereferenziazione o in direzione *.
Per accedere e modificare il contenuto di una variabile si usa il riferimento diretto con il nome della variabile o con riferimento indiretto all’indirizzo di memoria contenuto nella variabile del puntatore.
Se si dereferenziano puntatori non inizializzati o non inizializzati in modo corretto o quando sono inizializzati a NULL, causano comportamenti non definiti.
Per dereferenziare un puntatore a void, si deve prima convertire nel tipo adatto int x;void *p = &x;
*(( int *)p) = 1;
Per dichiarare variabili che contengono gli indirizzi della variabili puntatore si applica un numero sufficiente di volte * davanti all’identificativo, mentre per dereferenziare puntatori a puntatori, si applica * adeguatamente.
Puntatori a const sono indirizzi di memoria a cui non è possibile accedere per modificarne il contenuto non per forza di cosa la variabile puntata è const, ma non è solo possibile modificare il valore tramite dereferenziazione.
È possibile però modificare il valore di una variabile const assegnando il suo indirizzo a un puntatore non const, questo comportamento è poco pulito e genera warning del compilatore.
int x;
int * const p = &x; // p e un puntatore read - only ad int
int const *q = &x; // q e un puntatore a un un int read – only
Se si considera un puntatore read-only ad int , si può inizializzare e modificare il contenuto della cella puntata solo tramite dereferenziazione, ma questo puntatore può essere solo inizializzato e non modificato successivamente.