Fórum PiR2
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Incremento em C

4 participantes

Ir para baixo

Incremento em C Empty Incremento em C

Mensagem por wacandido Sex 16 Jun 2017, 19:47

Alguém poderia me ajudar a entender isso que não entra de jeito nenhum em minha cabeça ?


main( ) 

    int a=10; 
    printf("%d %d %d",++a, a++,a); 
}

Saída:  12  10  12

Por que a saída não é 11 10 10 ? 

Antecipadamente agradeço

wacandido
Padawan
Padawan

Mensagens : 61
Data de inscrição : 02/10/2012
Idade : 40
Localização : Rio de Janeiro - Brasil

Ir para o topo Ir para baixo

Incremento em C Empty Re: Incremento em C

Mensagem por Ashitaka Sex 16 Jun 2017, 23:33

https://stackoverflow.com/questions/24853/what-is-the-difference-between-i-and-i

____________________________________________
Dyin' ain't much of a livin', boy.
Ashitaka
Ashitaka
Monitor
Monitor

Mensagens : 4306
Data de inscrição : 12/03/2013
Idade : 24
Localização : São Paulo

Ir para o topo Ir para baixo

Incremento em C Empty Re: Incremento em C

Mensagem por Daedalus00 Sab 06 Out 2018, 00:29

@Ashitaka escreveu:https://stackoverflow.com/questions/24853/what-is-the-difference-between-i-and-i
Na minha opinião o problema envolve mais do que simplesmente a diferenca entre ++i e i++, tem algo a ver de como o printf avalia e dá prioridade de como calcula os termos, eu pesquisei um pouco, e alguns dizem que o printf calcula da direita pra esquerda (que nesse caso não se aplica), outros dizem que calcula nessa ordem meio>esquerda>direita (nesse caso da certo), outros dizem que é aleatório... um amigo meu disse que existe uma logica envolvendo operadores de incremento, porém eu ainda não sei sobre  Neutral

Daedalus00
Recebeu o sabre de luz
Recebeu o sabre de luz

Mensagens : 149
Data de inscrição : 09/06/2016
Idade : 20
Localização : Minas Gerais

Ir para o topo Ir para baixo

Incremento em C Empty Re: Incremento em C

Mensagem por PedroX Sab 06 Out 2018, 02:43

É um clássico "comportamento indefinido". Cada compilador pode tratar de uma maneira. Não se segue uma lógica determinada.

No exemplo:  printf("%d %d %d",++a, a++,a), o valor de a++ foi computado primeiro, depois o valor de ++a, e por fim de a. Não há uma regra, o que significa que você deve evitar fazer isso se não quiser ter resultados inesperados. Em outro compilador poderia ser diferente.
PedroX
PedroX
Administração
Administração

Mensagens : 995
Data de inscrição : 24/08/2011
Idade : 26
Localização : Campinas - SP

Ir para o topo Ir para baixo

Incremento em C Empty Re: Incremento em C

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissão neste fórum:
Você não pode responder aos tópicos