SóProvas


ID
928579
Banca
CESPE / CEBRASPE
Órgão
SERPRO
Ano
2008
Provas
Disciplina
Programação
Assuntos

Julgue os itens que se seguem, acerca da programação em
linguagem C.

O seguinte código não tem erros de sintaxe e sua execução resulta na apresentação dos valores 22, 28 e 34.

#include <stdio.h>
int funcao(int a, int *b) {
     static int c = 5;
     int d = 3;
    *b = *b + 5;
a++, c++, d++;
return (a + *b + c + d);
}
int main(int argc, char *argv[]) {
     int a = 2,b = 4,(*ptr)(int,int*);
     ptr = funcao;
     printf("%d\n",(*ptr)(a,&b));
     printf("%d\n",(*ptr)(a,&b));
     printf("%d\n",(*ptr)(a,&b));
}

Alternativas
Comentários
  • Correto. Repare que a variável c dentro da função foi declarada como static, logo o valor dessa variável é mantido de uma chamada pra outra. Fazendo um tracing do valor das variáveis, antes do return da função:

    Valor de a,b,c,d na 1a chamada: 3     9  6  4
    soma = 22
    Valor de a,b,c,d na 2a chamada: 3   14  7  4   #Veja que o valor de c não foi restaurado (como ocorreu com d), foi mantido em 6 e incrementado para 7
    soma = 28                                                       
    Valor de a,b,c,d  na 3a chamada: 3  19  8  4
    soma = 34

    Assim como ocorre com c, o valor de b não é restaurado, mas o motivo é diverso: o endereço desta variável é passado para a função, fazendo com que as mudanças persistam mesmo após o retorno.
    Obs.: com todo respeito, elevei o comentário para o nível de analista. Se alguém não compreender, posso explicar com mais detalhes.