Faça o teste de mesa passo a passo. Identifique o valor das variáveis x, y, a, b e o conteúdo apontado por p em cada etapa. Observe quais alterações permanecem no programa principal. Ao final, indique a caneta os valores finais de x e y. #include <iostream> using namespace std; void modifica(int a, int &b, int *p) { a = a + 5; b = b + 10; *p = *p + 20; cout << a << " " << b << " " << *p << endl; } int main() { int x = 10, y = 20; int *p = &x; modifica(x, y, p); cout << x << " " << y << endl; *p = *p + 5; cout << x << " " << y << endl; return 0; }

Questão

Faça o teste de mesa passo a passo. Identifique o valor das variáveis x, y, a, b e o conteúdo apontado por p em cada etapa. Observe quais alterações permanecem no programa principal. Ao final, indique a caneta os valores finais de x e y.

#include <iostream> using namespace std; void modifica(int a, int &b, int *p) { a = a + 5; b = b + 10; *p = *p + 20; cout << a << " " << b << " " << *p << endl; } int main() { int x = 10, y = 20; int *p = &x; modifica(x, y, p); cout << x << " " << y << endl; *p = *p + 5; cout << x << " " << y << endl; return 0; }

Imagem 1

| Etapa | x | y | a | b | *p | Efeito | |---|---:|---:|---:|---:|---:|---| | Início do main | | | | | | | | Entrada em modifica | | | | | | | | Após a = a + 5 | | | | | | | | Após b = b + 10 | | | | | | | | Após *p = *p + 20 | | | | | | | | Retorno ao main | | | | | | | | Após *p = *p + 5 | | | | | | |

Resposta

98%

Valores finais: x = 35 e y = 30.

Explicação

Vamos acompanhar as variáveis lembrando:

  • Parâmetro a é passado por valor (cópia de x). Mudanças em a NÃO afetam x no main.
  • Parâmetro b é passado por referência (apelido de y). Mudanças em b alteram y no main.
  • Parâmetro p é um ponteiro (cópia do endereço &x). Mas ao fazer *p = ..., você altera o conteúdo do endereço apontado (isto é, altera x).

Tabela (teste de mesa)

Etapaxyab*pEfeito no main
Início do main102010x=10, y=20; p aponta para x
Entrada em modifica (modifica(x,y,p))1020102010a recebe cópia de x; b referencia y; p aponta para x
Após a = a + 51020152010muda só a (não altera x)
Após b = b + 101030153010altera y (b é referência)
Após *p = *p + 203030153030altera x (via ponteiro p)
Retorno ao main303030permanece x=30 e y=30 (a “morre” ao sair da função)
Após *p = *p + 5353035altera x novamente (p ainda aponta para x)

Saídas do programa (para conferir)

  • Dentro de modifica: imprime 15 30 30
  • Depois da chamada no main: imprime 30 30
  • Depois de *p = *p + 5: imprime 35 30

Portanto, os valores finais são:

  • x = 35
  • y = 30

Alternativa correta: (sem alternativas).

Travou em outra questão? A gente resolve.

Crie sua conta grátis e resolva 3 questões por dia com explicação passo a passo, por texto ou foto.

Questões relacionadas

Ver últimas questões

Comece a estudar de forma inteligente hoje mesmo

Resolva questões de concursos e vestibulares com IA, gere simulados personalizados e domine os conteúdos que mais caem nas provas.

Cancele quando quiser.