::Il-mio.sito-web-dedicato-al.coding   

... un quaderno delgi appunti! di Giuseppe VACCA

Linguaggio di programmazione C


L-Value

 

Cosa si intende per L-Value

L-Value indica, semplicemente, un oggetto che ha una posizione identificabile nella memoria (vale a dire che ha un indirizzo).

L-Value sta per Left-Value poichè può trovarsi a sinistra dell'operatore di assegnamento '=', ed ha una locazione ben definita in memoria.

R-Value indica, diversamente, un oggetto, con un valore in se, che non ha una posizione identificabile nella memoria e si trova a destra dell'operatore di assegnamento.

Una espressione non può essere un L-Value. Infatti in una qualsiasi istruzione di assegnazione L-Value deve avere la capacità di memorizzare i dati: non può essere una funzione e non può essere una costante.

Quanto detto non esclude la possibilità che L-Value possa trovarsi sul lato destro dell'operatore di assegnazione.

L-Value sono spesso degli identificatori, in tal caso l'idenficatore indica una posizione di archiviazione di una variabile e il valore delle variabile è il valore archiviato in quella posizione. Più in generale per identificatori si intendono dei token testuali (altrimenti chimati simboli) che danno un nome alle entità di un linguaggio. Nei linguaggi di programmazione esempi di tali entità sono ad esempio le variabili appunto, i tipi, le etichette, le funzioni, ecc. ...

Espressioni che si riferiscono a posizioni di memoria modificabili sono chiamate: L-Value modificabili.

L-Value modificabili non possono avere:

  1. Un tipo array;
  2. Un tipo incopleto;
  3. Un tipo con l'attributo cost;
Affinchè le strutture e le union possano essere L-Value modificabili, non devono avere alcun membro con l'attributo cost.

Il tipo degli L-Value modificabili può essere:

  1. aritmetico;
  2. struttura;
  3. unione;
  4. puntatore;

Ad esempio, se ptr è un puntatore ad una zona di archiviazione allora *ptr è un L-Value modificabile che designa una zona di archiviazione alla quale ptr punta.

In sintesi, un L-Value è una espressione che identifica in modo univoco una locazione di memoria dove è possibile memorizzare un valore che può essere cambiato tramite un'operazione di assegnazione.