Os resultados são i =6 e x =5, eu entendi que o valor de x é 5 porque o pós incremento só acrescentaria 1 depois dessa linha, mas porque o valor de i se alterou ? Porque i armazenou o valor de uma operação que eu fiz abaixo ? Até então eu pensava que essas declarações eram independentes, se eu fizer por exemplo:
i++ é uma operação completa, que altera o valor de i . É equivalente à:
i = i + 1;
Independente se é pré ou pós incremento, o fato de o valor de i estar sendo passado à outra variável não muda o fato de que a operação i = i + 1 será executada.
Inclusive, você pode executar esse comando isoladamente:
inti=5;i++;// i passa a ser 6i++;// i passa a ser 7intx=i+5;// x passa a ser 12
Abraço.
darlan_machado
Basicamente, se você tem isso
Você não tem nenhuma atribuição do valor i + 5 a variável i. Por essa razão é que o o valor de i permanece em 5. Agora, se você tivesse
i=i+5;
Então o valor de i passaria a 10
S
SkyNyrd
Exato, entendo que o valor de i não é alterado pois não tenho nenhuma atribuição a ele, estou somente somando ele a um valor e atribuindo o resultado a outra variável (no caso x).
Mas quando eu tenho:
inti=5;//6intx=i++;//5
A única atribuição que vejo a i é 5 .
Vi que o @TerraSkilll disse que i++ é como se fosse i = i+1, então, independente de eu fazer a atribuição de i++ a i , o valor (de i)é atualizado ?
Solucao aceita
TerraSkilll1 like
Sim.
Como eu disse, i++ é uma operação completa. O fato de ela participar de uma atribuição não importa. O ++ é sempre executado. Exemplificando:
i=5;x=i++;
É equivalente à:
i=5;x=i;i=i+1;
Note que a remoção da atribuição a x não altera nada, se i++ for mantido: