Questão FC373305
Considere o programa em C abaixo. #include <stdio.h> int main() { int y, *p, x; y = 0; p = &y; x = *p; x += 10; ++(*p); --x; (*p) += x; printf ("y = %i\n", y); return 0; } Ao ser c
Linguagens de Programação
FCC · 2022
Considere o programa em C abaixo.
#include <stdio.h>
int main() {
int y, *p, x;
y = 0;
p = &y;
x = *p;
x += 10;
++(*p);
--x;
(*p) += x;
printf ("y = %i\n", y);
return 0;
}
Ao ser compilado e executado em condições ideais, a saída do programa é:
- y = 9
- y = 0
- y = 10
- y = 1
- y = 11
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
O programa inicia com y igual a 0 e p recebendo o endereço de y, portanto *p refere-se diretamente a y.
Ao executar x = *p, temos \(x = 0\). Em seguida x += 10 faz \(x = 0 + 10 = 10\).
A instrução ++(*p) é um pré-incremento aplicado a *p, ou seja, incrementa y imediatamente: \(y = 0 + 1 = 1\).
Depois --x é um pré-decremento sobre x, resultando em \(x = 10 - 1 = 9\). Note que essa alteração afeta apenas x, não y.
Por fim, (*p) += x soma o valor atual de x a *p (isto é, a y): \((*p) = 1 + 9 = 10\).
Logo, o printf imprime y = 10, pois todas as operações sobre *p modificaram y através do ponteiro p.
Conteúdo do catálogo FC Concursos · Atualizado em