Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Pré Incremento e Pós Incremento com Ponteiros em C

#include <stdio.h>
#include <stdlib.h>
int main(){
    int *p, x = 10;
    p = &x;
    printf("Conteudo apontado por p: %d \n",*p);
    *p = (*p)++;
    printf("Conteudo apontado por p: %d \n",*p);
    *p = (*p) * 10;
    printf("Conteudo apontado por p: %d \n",*p);
 return 0;
}

A saída desse código é: Conteudo apontado por p: 10 Conteudo apontado por p: 10 Conteudo apontado por p: 100

Sabendo o conceito de Pós e Pre incremento, o porque na linha 8 desse código, não teremos a impressão do valor 11, já que ele faz um pós incremento.

2 respostas
solução!

Ola Daiane,

Não tenho certeza, mas essa linha 8 está meio esquisita.

(*p)++;
//É a mesma coisa que:
*p = *p +1;
//Então é como se você estivesse escrevendo:
*p = *p = *p +1;

Então, eu entendo que o compilador para na segunda igualdade e não faz o incremento.

Agora, se você colocar o código desta forma, o resultado será 11:

#include <stdio.h>
#include <stdlib.h>
int main(){
    int *p, x = 10;
    p = &x;
    printf("Conteudo apontado por p: %d \n",*p);
    (*p)++;
    printf("Conteudo apontado por p: %d \n",*p);
    *p = (*p) * 10;
    printf("Conteudo apontado por p: %d \n",*p);
 return 0;
}

Sim, eu entendo que não faz sentido, não é usual mas apareceu em uma questão de aula e eu não tinha entendido o porque. Mas pesquisando, é exatamente isso, ele armazena o valor novamente na variável, ai pro compilador o valor já foi substituido e não faz o incremento. Mas obrigada pela ajuda!!