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; }
| 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)
| Etapa | x | y | a | b | *p | Efeito no main |
|---|---|---|---|---|---|---|
| Início do main | 10 | 20 | — | — | 10 | x=10, y=20; p aponta para x |
| Entrada em modifica (modifica(x,y,p)) | 10 | 20 | 10 | 20 | 10 | a recebe cópia de x; b referencia y; p aponta para x |
| Após a = a + 5 | 10 | 20 | 15 | 20 | 10 | muda só a (não altera x) |
| Após b = b + 10 | 10 | 30 | 15 | 30 | 10 | altera y (b é referência) |
| Após *p = *p + 20 | 30 | 30 | 15 | 30 | 30 | altera x (via ponteiro p) |
| Retorno ao main | 30 | 30 | — | — | 30 | permanece x=30 e y=30 (a “morre” ao sair da função) |
| Após *p = *p + 5 | 35 | 30 | — | — | 35 | altera x novamente (p ainda aponta para x) |
Saídas do programa (para conferir)
- Dentro de
modifica: imprime15 30 30 - Depois da chamada no main: imprime
30 30 - Depois de
*p = *p + 5: imprime35 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.