Concetti Chiave
- L'operatore di dereferenziazione (*) consente di accedere al contenuto di una variabile tramite il puntatore.
- Un puntatore non inizializzato o inizializzato a NULL può causare comportamenti non definiti.
- Per dereferenziare un puntatore a void, è necessario convertirlo nel tipo corretto prima dell'uso.
- Puntatori a const permettono di accedere ma non di modificare il contenuto della variabile puntata.
- I puntatori a puntatori richiedono un uso accurato dell'operatore * per dichiarazioni e dereferenziazioni multiple.
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.
Dereferenziazione e comportamenti
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 e read-only
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.
Domande da interrogazione
- Qual è l'importanza della dereferenziazione nei puntatori?
- Cosa sono i puntatori a const e quali limitazioni presentano?
- Come si gestiscono i puntatori a puntatori?
La dereferenziazione è fondamentale per accedere e modificare il contenuto di una variabile tramite un puntatore. Tuttavia, è cruciale farlo solo con puntatori inizializzati correttamente, poiché dereferenziare puntatori non inizializzati o a NULL può causare comportamenti non definiti.
I puntatori a const sono indirizzi di memoria che non possono essere utilizzati per modificare il contenuto a cui puntano. Anche se è possibile modificare il valore di una variabile const tramite un puntatore non const, questo approccio è considerato poco pulito e può generare avvisi dal compilatore.
Per dichiarare variabili che contengono indirizzi di puntatori, è necessario applicare l'operatore di dereferenziazione (*) il numero adeguato di volte. Questo consente di accedere e modificare i valori attraverso più livelli di puntatori, ma richiede attenzione per evitare errori di dereferenziazione.