Ominide 7993 punti

Puntatori


Una definizione di una variabile comporta l’allocazione di celle di memoria nella RAM, dipendente dal tipo di variabile, quindi ogni variabile ha un indirizzo di memoria univoco. Un puntatore è un tipo di variabile che consente di memorizzare un indirizzo di memoria, riferendosi ad una cella potendo anche accedere al contenuto usando la dereferenziazione del puntatore.

Per dichiarare una variabile puntatore: <tipo> *<nome>
È possibile dichiarare puntatori generici, senza specificare il tipo di puntatore, in questo caso:
void *<nome>, utile quando non è noto qual è il tipo della variabile che si referenzia, per usarli però è necessario effettuare un cast al tipo desiderato. Un puntatore di tipo void però non può essere referenziato. Per effettuare il cast:
int x ,*p = &x;
void *q = p;
int *r = q; // r = p
In cui i valori della variabile a cui si fa riferimento non deve cambiare; però non significa che per ogni tipo sizeof(void *) ≥ sizeof(tipo *).
Un puntatore contiene un indirizzo di memoria o NULL. Gli indirizzi di memoria dipendono dalla dimensione dello spazio di indirizzamento della memoria durante il processo. Per ottenere un indirizzo di memori di una cella i deve usare l’operatore &.
La costante NULL è una macro della libreria stdlib.h, rappresenta un indirizzo di memoria non accessibile. Se un puntatore ha come valore NULL, il puntatore non punta a nulla. Secondo il C, NULL e 0 sono equivalenti, quindi nell’ritmetica dei puntatori, lo 0 è convertito automaticamente in NULL.
La macro NULL è definita come: #define NULL ((void*)0) oppure #define NULL 0
È necessario informare il compilatore del tipo di dato a cui il puntatore si riferisce poichè è utile sapere la dimensione della variabile e come interpretare il contenuto della locazione di memoria puntata, se pero l’assegnamento all’indirizzo di memoria non è compatibile, l’accesso al suo contenuto può avere un comportamento non definito e il compilatore avvisa con un warning.
È possibile determinare la dimensione di un puntatore usando sizeof(). Lo standard non impone alcun tipo di vincolo sulla dimensione del tipo di dato e non sempre puntatori a dati di tipo diverso hanno dimensioni uguali/diverse.
Hai bisogno di aiuto in Informatica?
Trova il tuo insegnante su Skuola.net | Ripetizioni
Potrebbe Interessarti
×
Registrati via email