Lvalues
Uma expressão que identifica um espaço de memória que armazena um valor é chamada de lvalue, porque é uma localização que pode armazenar um valor.
Os tipos padrão de lvalues são:
Uma variável.
Uma expressão de desreferenciamento de ponteiro (veja ) usando o unário ‘*’.
Uma referência a um campo de estrutura (veja ) usando ‘.’, se o valor da estrutura for um lvalue.
Uma referência a um campo de estrutura usando ‘
->
’. Isso é sempre um lvalue já que ‘->
’ implica desreferenciamento de ponteiro.Uma referência a uma alternativa de união (veja ), nas mesmas condições que para campos de estruturas.
Uma referência a um elemento de um array usando ‘[…]’, se o array for um lvalue.
Se a operação mais externa de uma expressão for qualquer outro operador, essa expressão não é um lvalue. Assim, a variável x
é um lvalue, mas x + 0
não é, mesmo que essas duas expressões calculem o mesmo valor (supondo que x
seja um número).
Um array pode ser um lvalue (as regras acima determinam se ele é um), mas usar o array em uma expressão o converte automaticamente em um ponteiro para o elemento zero. O resultado dessa conversão não é um lvalue. Portanto, se a variável a
for um array, você não pode usá-la sozinha como o operando esquerdo de uma atribuição. Mas você pode atribuir a um elemento de a
, como a[0]
. Isso é um lvalue, já que a
é um lvalue.
Atualizado