Questão de Programação — Programação estruturada — FUNDATEC 2026
Programação›Programação estruturada
Código
qg685257
Banca
FUNDATEC
Órgão
IFC-SC
Ano
2026
Nível
Superior
Cargo
Professor EBTT - Informática: Linguagens de Programação
Analise o seguinte programa escrito em linguagem C conforme o padrão ANSI C, no qual a modificação de valores é realizada por passagem por referência utilizando ponteiros:Considerando a execução do programa apresentado, qual valor será exibido?
A3
B4
C5
D8
E9
Revelar gabarito e comentário▾
GabaritoD — 8
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Resolução
Gabarito: letra D — a conta chega a 8 — alternativa D.
A ideia por trás
Em C, toda passagem de argumento para uma função é por valor: a função recebe uma cópia do valor e qualquer alteração nessa cópia não afeta a variável original. Para modificar a variável original, usamos ponteiros: passamos o endereço da variável, e a função, ao desreferenciar o ponteiro com o operador *, acessa e altera diretamente o conteúdo da memória original. Isso é chamado de passagem por referência.
Quando uma função recebe um ponteiro, o parâmetro é uma variável que guarda um endereço de memória. O operador * (desreferência) permite ler ou escrever no local apontado. Assim, *a = *a + *b significa: pegue o valor armazenado no endereço apontado por a, some com o valor no endereço apontado por b, e guarde o resultado no endereço de a. Como a aponta para a variável original, a alteração persiste após o retorno da função.
Esta questão testa exatamente esse comportamento: a função modifica recebe os endereços de x e y, e as operações dentro dela alteram os valores originais. O ponto crítico é acompanhar a sequência das operações, pois a segunda linha usa o valor já atualizado da primeira.
O que a questão dá
x inicializado com 3
y inicializado com 5
chamada modifica(&x, &y)
printf exibe x
O que queremos: o valor exibido pelo printf
Passo 1 — Executar a primeira linha da função
A primeira operação dentro de modifica é *a = *a + *b. Aqui, *a é o valor de x (3) e *b é o valor de y (5). Somamos 3 + 5 = 8 e guardamos esse resultado no endereço de x, ou seja, x agora vale 8.
Por que esta fórmula: A operação é uma atribuição com soma: o valor apontado por a recebe a soma do valor apontado por a com o valor apontado por b.
De onde vem cada valor: = enunciado: x = 3 · = enunciado: y = 5
NÃO CAIA NESSA!
Usar o valor de x como 3 na segunda linha, esquecendo que já foi atualizado.
Passo 2 — Executar a segunda linha da função
Agora a segunda operação é *b = *a - *b. Neste ponto, *a já vale 8 (o novo valor de x) e *b ainda vale 5 (o valor original de y). Calculamos 8 - 5 = 3 e guardamos no endereço de y, então y passa a valer 3.
Por que esta fórmula: É uma atribuição com subtração: o valor apontado por b recebe a diferença entre o valor apontado por a (já atualizado) e o valor apontado por b.
De onde vem cada valor: = passo 1: x = 8 · = enunciado: y = 5
NÃO CAIA NESSA!
Usar o valor original de x (3) em vez do atualizado (8), resultando em -2.
Passo 3 — Ver o que o printf exibe
Após a função retornar, a main executa printf("%d", x). Como x foi modificado para 8, o valor exibido é 8.
NÃO CAIA NESSA!
Achar que x continua 3, ignorando a passagem por referência.