🟰7. Expressões de Atribuição

Como conceito geral em programação, uma atribuição é uma construção que armazena um novo valor em um local onde valores podem ser armazenados — por exemplo, em uma variável. Esses locais são chamados de lvalues (veja ) porque são locais (por isso o "l") que armazenam um valor.

Uma atribuição em C é uma expressão porque possui um valor; chamamos isso de expressão de atribuição. Uma atribuição simples se parece com:

lvalue = valor-para-armazenar

Dizemos que ela atribui o valor da expressão valor-para-armazenar ao local lvalue, ou que armazena valor-para-armazenar lá. Você também pode pensar no "l" de "lvalue" como significando "esquerda" (left), já que é o que você coloca no lado esquerdo do operador de atribuição.

No entanto, essa não é a única forma de usar um lvalue, e nem todos os lvalues podem ser atribuídos. Para usar o lvalue no lado esquerdo de uma atribuição, ele precisa ser modificável. Em C, isso significa que ele não foi declarado com o qualificador de tipo const (veja ).

O valor da expressão de atribuição é o de lvalue após o novo valor ser armazenado nele. Isso significa que você pode usar uma atribuição dentro de outras expressões. Os operadores de atribuição são associativos à direita, de modo que:

x = y = z = 0;

é equivalente a:

x = (y = (z = 0));

Essa é a única maneira útil para associá-los; a outra maneira,

((x = y) = z) = 0;

seria inválida, pois uma expressão de atribuição como x = y não é válida como um lvalue.

Quando o texto diz que o valor de expressão de atribuição é o de lvalue, quer dizer que a expressão "retorna" o lvalue. Por exemplo, i = 10 "retorna" 10. Ou seja, se essa expressão de atribuição inteira for utilizada à direita de um operador de atribuição, o valor dela será 10.

Aviso: Coloque parênteses ao redor de uma atribuição se você a aninhar dentro de outra expressão, a menos que seja uma expressão condicional, uma série separada por vírgulas ou outra atribuição.

Atualizado