Condição para lvalues ​​e rvalues ​​em C

Aqui estão algumas definições que li sobre lvalues

Expressões que podem ser usadas com o & operador. ou seja, se & (expressão) não for um erro, a expressão é um lvalue

Expressão que resulta em objetos que não são temporários

Expressões de lvalue podem ser usadas em ambos RHS e LHS de = operator

Expressões rvalue podem ser usadas apenas no RHS

Por favor corrija se errado

Aqui está a pergunta

Eu li ++ x é um lvalue e x ++ é um rvalue

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

Em caso afirmativo, por que isso é um erro?

Se expressões lvalue podem ser usadas em lhs

int i = 0;
++i = 10;

Por que não posso usar a declaração acima? Ambos acima estão resultando em erros

Atualização: Ambas as instruções acima estão bem em C ++

questionAnswers(5)

yourAnswerToTheQuestion