Una constante, una variable, una matriz o un miembro de una estructura pueden considerarse valores l, ya que cumplen con este requisito.
A continuación se muestran algunos ejemplos de valores l en C:
```c
matriz int[10];
int* pointer_to_array =&array;
int principal() {
matriz[0] =10; // matriz[0] es un valor l
(*puntero_a_matriz) =10; // *pointer_to_array también es un valor l
devolver 0;
}
```
Sin embargo, no todas las expresiones son valores l. Por ejemplo, las llamadas a funciones y los valores literales no se consideran valores l.
```c
función int (int a) {
// a no es un valor l
devolver un + 10;
}
int principal() {
// 10 no es un valor l
10 + 5;
}
```
La distinción entre lvalues y rvalues (expresiones que no denotan una ubicación de memoria) es crucial porque solo los lvalues se pueden modificar con un operador de asignación (=).
Aquí hay un ejemplo para demostrar la diferencia:
```c
int principal() {
// a es un valor l
int a =10;
// b es un valor r
int b =10 + 5;
un +=5; // Esto es válido, ya que a es un valor l
// Este es un error en tiempo de compilación, ya que b es un valor r
b+=5;
}
```
Entonces, en resumen, un valor l es cualquier cosa que corresponda a una ubicación de memoria y que pueda estar en el lado izquierdo de una asignación (=).