Es * p un valor o valor

En el siguiente código, ¿es *a un rvalue o un lvalue?

 #include  void main() { int b=2; int *a=NULL; a=&b; *a=3; printf("%d",*a); } 

Como se expone en http://en.wikipedia.org/wiki/Value_%28computer_science%29 :

Los valores de L tienen direcciones de memoria a las que el progtwig en ejecución puede acceder mediante progtwigción (p. Ej., A través de alguna dirección de operador como “&” en C / C ++), lo que significa que son variables o referencias a una determinada ubicación de memoria. Los valores pueden ser valores de l (ver más abajo) o valores no-l

Entonces, * a es un valor

Es un valor l y se puede utilizar en un contexto de valor r. Vea el ejemplo;

 int i, j, *p, *q; p = &i; q = &j; *p = 1; // *p is l-value *q = 2; // *q is l-value *p = *q // *q is r-value 

Como señaló Charles Bailey en su comentario: – La subexpresión *q sigue siendo un valor l, sufre una conversión de valor l a valor r porque se utiliza en un contexto donde se requiere un valor r.


Ahora uno puede pensar ¿Por qué *q sigue siendo l-valor?
Porque, por definición de r-value, r-value es un valor temporal que no persiste más allá de la expresión que lo usa.
En este caso, el valor de *q persiste más allá de la expresión *p = *q .


NOTA:

El operador “*” – el operador de deferencia / direccionamiento indirecto – opera en la variable del puntero y devuelve un valor l equivalente al valor en la dirección del puntero.