Analise o código a seguir, escrito na linguagem de programaç...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C - 5.
A questão requer o entendimento de como funções e passagem de parâmetros funcionam na linguagem C, além de conceitos como variáveis, atribuição de valores, ponteiros e aritmética básica. Vamos destrinchar o código passo a passo para entender o resultado.
A função main() inicia declarando três variáveis inteiras a, b, e z, e atribui os valores 1 e 2 às variáveis a e b, respectivamente. A função sub() é então chamada com os argumentos &a (o endereço de memória da variável a) e b.
Dentro da função sub(), o parâmetro *x é um ponteiro para um inteiro, o que significa que ele aponta para o endereço de uma variável inteira e pode modificar o valor nesse endereço. O parâmetro y é uma cópia do valor de b devido à passagem por valor. Essa distinção é crucial.
A linha *x = 3; altera o valor da variável que está no endereço apontado por *x, que é a variável a na função main(). Portanto, após a execução dessa linha, a passa a ter o valor 3.
Seguidamente, y = *x + 1; altera o valor de y para ser igual a 4 (3 + 1), mas isso não afeta a variável b na função main(), já que y é uma cópia independente de b.
De volta na função main(), a linha z = a + b; soma os valores atuais de a (que agora é 3) com b (que permaneceu como 2). Logo, z recebe o valor 5 (3 + 2).
O comando printf("%d",z); imprime o valor de z na saída padrão, que é 5. É por isso que a alternativa C é a correta.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Na chamada da função sub(), a variável "a" é passada por referência e "b" por valor.
Logo, o que for feito com "x" dentro de sub() estará afetando a referência "a" declarada no main.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo