Condición para lvalues ​​y rvalues ​​en C

Aquí están las pocas definiciones que leí sobre valores.

Expresiones que pueden ser usadas con & operator. es decir, si & (expresión) no es un error, entonces la expresión es un lvalue

Expresión que da como resultado objetos que no son temporales.

Las expresiones de valores pueden usarse tanto en RHS como en LHS de = operator

Las expresiones de valor pueden usarse solo en RHS

Por favor corrija si está equivocado

Aquí está la pregunta

Leo ++ x es un lvalue y x ++ es un rvalue

int i = 0;
printf("%p",(void*)&++i);

Si es así, ¿por qué es esto un error?

Si lvalue expresiones pueden usarse en lhs

int i = 0;
++i = 10;

¿Por qué no puedo usar la declaración anterior? Ambas cosas anteriores dan como resultado errores

Actualización: Ambas afirmaciones anteriores están bien en C ++

Respuestas a la pregunta(5)

Su respuesta a la pregunta