Introduzione al Linguaggio C

di C. Munisso


Capitolo 2 - Tipi di dati


2.6. Valori, puntatori e indirizzi

In C ogni variabile ha due tipi di valori: una locazione di memoria ed un oggetto memorizzato. La locazione di memoria e costituita dall'indirizzo di memoria dell'oggetto ed è chiamata lvalue (contrazione dal'inglese left value). L'oggetto memorizzato è quello contenuto nella locazione di memoria ed é chiamato rvalue (contrazione dall'inglese right value).

Consideriamo le seguenti istruzioni:

int x = 3, y;
y = x;

Abbiamo dichiarato due variabili di tipo intero x e y e contestualmente inizializzato x con il valore 3, quindi abbiamo assegnato il valore di x a y. Le due distinte variabili, x e y, hanno differenti locazioni di memoria (lvalue) ma dopo l'assegnazione contengono il medesimo oggetto (il valore 3).

L'rvalue di una variabile può essere l'indirizzo (lvalue) di un'altra variabile; in questo caso la prima variabile punta alla seconda. La dichiarazione di questa variabile si effettua con l'operatore di indirezione o puntatore *, per esempio:

int x = 3, y;
int *ptr;
ptr = &x;
y = *ptr;

In questo esempio abbiamo dichiarato una variabile ptr come puntatore ad intero e quindi assegnato al suo rvalue l'lvalue di x mediante l'operatore indirizzo &; infine abbiamo assegnato alla variabile y, l'rvalue dell'oggetto puntato da ptr (x). È bene sottolineare che l'utilizzo di *ptr è possibile solo dopo una sua valida assegnazione. Ricordiamo che la locazione delle variabili in memoria ed il loro ordine vengono stabiliti dal compilatore.

Torna all'indice