Valor L vs valor R en C

Estoy respondiendo una pregunta de un libro de texto deeste libro de texto.

Estoy aprendiendo sobre punteros en C y me he encontrado con valores l y valores r. Desde mi entendimiento:

l-values are values that are defined after they are executed (++x)
r-values are values that are not defined after they are executed (x++)

¿Es eso correcto?

La pregunta que quería responder (con mis intentos):

a) Which of the following C expressions are L-Values?
   1.  x + 2 Not a L value
   2.  &x    Is a L value
   3.  *&x   Is a L value
   4.  &x + 2  Not a L value
   5.  *(&x + 2) Is a L value
   6.  &*y  Is a L value

b) Is it possible for a C expression to be a L-value but NOT a R-value? Explain
   I've read that a L value can be a R value but not vice versa. I can't think of an example of something being an L value but not a R value.

c) Is &(&z) ever legal in C? Explain
   Assuming this is not legal since a memory address doesn't have its own memory address?

¿Estoy cerca? Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta