Toda expressão em C tem um valor. Por exemplo, se x vale 20 então a expressão 3 * x + 4 tem valor 64. Nas mesmas condições, a expressão
y = 3 * x + 4
tem valor 64. O cálculo do valor dessa expressão tem o efeito colateral de atribuir à variável y o valor da subexpressão 3 * x + 4. Assim, y passa a valer 64.
Outro exemplo: se x vale 20 então o valor da expressão x = x + 1 é 21. O cálculo do valor dessa expressão tem o efeito colateral de incrementar o valor de x.
Eis um exemplo mais delicado, muito comum em C: se x vale 20 então o valor da expressão
x++
é 20. Um exemplo sutilmente diferente: se x vale 20 então o valor da expressão
++x
é 21. Em ambos os casos, as expressões têm como efeito colateral o incremento do valor de x, que passa a valer 21.
Algo análogo vale para expressões da forma x-- e --x.
Mais um exemplo: O valor da expressão c = (a = 1) + (b = 2) é 3. O efeito colateral da expressão é atribuir os valores 1, 2 e 3 às variáveis a, b e c respectivamente.
Último exemplo: No trecho de código abaixo, o valor da expressão c = i é 255 (e não −1, como alguém poderia imaginar):
unsigned char c; int i; i = -1; c = i;