Operadores de incremento e decremento

Incrementar ou decrementar algum número por 1 é muito comum, portanto existem operadores para fazer isso de forma concisa.

Operadores de prefixo ++ e --

Estes operadores unários ficam à esquerda de seus operandos e os modificam, incrementando (++) ou decrementando (--) o valor em 1.

Aqui está um diagrama ilustrando as alterações que estes operadores causam no valor de uma variável:

stateDiagram
    Direction LR
    [*]-->5: n = 5
    3-->4: ++n
    4-->5: ++n
    5-->6: ++n
    6-->7: ++n
    7-->6: --n
    6-->5: --n
    5-->4: --n
    4-->3: --n

    note left of 3
        ...
    end note

    note right of 7
        ...
    end note
int n = 5;
++n; // n agora vale 6
--n; // n agora vale 5
--n; // n agora vale 4
++n; // n agora vale 5

As operações acima não só modificam o operando como também produzem seu novo valor. Isso significa que a expressão ++n produz o valor n + 1 e a expressão --n produz n - 1.

int n = 5;

printf("%d\n", ++n);
printf("%d\n", --n);

6
5

Operadores de sufixo ++ e --

Ao contrário dos operadores de prefixo, estes operadores ficam à direita do operando. O comportamento é similar: ++ incrementa e -- decrementa, porém a expressão produz o valor original e o incremento/decremento não ocorre imediatamente mas sim durante ou antes do próximo ponto de sequência. Pontos de sequência existem em vários lugares diferentes, e.g. todo ; é um ponto de sequência.

int n = 5;

printf("%d\n", n++); // n++ produz 5 e depois incrementa n
printf("%d\n", n);

5
6

Quando, sem um ponto de sequência entre as expressões, o valor de um objeto for incrementado/decrementado várias vezes, ou incrementado/decrementado e acessado, o comportamento do programa é indefinido.

int n = 0;
printf("%d %d", n, ++n); // Comportamento imprevisível: n incrementado e
                         // acessado sem um ponto de sequência entre as
                         // expressões

O programa acima pode exibir qualquer saída ou até travar, pois o valor de n pode ser acessado antes/durante/após seu incremento. Isso será detalhado posteriormente.