FC ConcursosFC Concursos

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 é:

  1. y = 9
  2. y = 0
  3. y = 10
  4. y = 1
  5. 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

Continue aprendendo