Qual a diferença entre x++ e ++x ?

É bastante comum em algum momento que se está aprendendo uma linguagem que possua o operador de incremento, como é o caso da linguagem C, a pessoa se perceber da forma diferente de uso do operador e se perguntar se existe alguma diferença.

Muitas pessoas não percebem a diferença entre essas duas formas de uso do operador de incremento, isso porque aprendem o uso do operador  aplicando em situações onde não existe qualquer efeito da diferença. Para exemplificar, considere o código abaixo.

#include <stdio.h>

int main()
{
    int x=0, y=0;
    x++;
    ++y;
    printf("x: %i \n y: %i", x, y);
    return 0;
}

Veja que nesse código, as variáveis utilizam o operador de incremento antes e depois da variável e o resultado é exatamente o mesmo, onde ambas as variáveis exibem o valor 1. Isso gera a errônea impressão de que não existe diferença entre as duas formas.

Agora considere o código abaixo. Nele a diferença é que o incremento está sendo realizado no momento do printf. Veja que a execução desse código mostra valores diferentes no primeiro printf. Para complementar, veja que o segundo printf, que somente mostra os valores das variáveis, exibe que ambas as variáveis possuem o mesmo valor.

#include <stdio.h>

int main()
{
    int x=0, y=0;
    printf("x: %i \n y: %i", x++, ++y);
    printf("\n\n x: %i \n y: %i", x, y);
    return 0;
}

A diferença na posição do operador de incremento pode ser pontuada da seguinte maneira:

  • quando se utiliza variavel++ é inicialmente utilizado o conteúdo da variável e depois incrementada a variável.
  • quando se utiliza ++variavel é inicialmente incrementada a variável e depois utilizado o conteúdo.

Exemplificando através do último código, quando é dado o printf de ++y, inicialmente é incrementado o valor da variável y (que passa de zero para 1) e depois mostrado o valor da variável. Com o printf de x++, inicialmente é mostrado o valor da variável (no caso, o valor zero) e depois incrementado o valor de x (que passa de zero para 1). Por isso o resultado do primeiro printf mostra valores diferentes para x e y, embora o segundo printf mostre que as variáveis, após o término do primeiro printf, possuem o mesmo valor.

Em tempo, o mesmo comportamento ocorre com o operador de decremento.

Share

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.