Computação Múltipla Escolha

Na linguagem C, o nome de um array é tratado, na maioria das expressões, como um ponteiro para o seu primeiro elemento. Isso permite o uso da chamada aritmética de Ponteiros”. Analise o trecho, em C, a seguir: int valores[4] = {10, 20, 30, 40}; int *p = valores; p++; p++; printf("%d", *p);

Na linguagem C, o nome de um array é tratado, na maioria das expressões, como um ponteiro para o seu primeiro elemento. Isso permite o uso da chamada aritmética de Ponteiros”. Analise o trecho, em C, a seguir:

int valores[4] = {10, 20, 30, 40};
int *p = valores;

p++;
p++;
printf("%d", *p);

  1. Será impresso 20, pois p++ desloca o ponteiro para a próxima posição de memória compatível com um número inteiro (o segundo elemento do vetor)
  2. Será impresso 10, pois o ponteiro continua apontando para o início do vetor, a operação p++ é inválida
  3. Será impresso 11, em formato hexadecimal
  4. Será impresso 11, pois p++ incrementa o valor do primeiro elemento em uma unidade
  5. Ocorrerá um erro de compilação, pois não é possível associar um ponteiro ao nome do array sem usar o operador &

Resolução completa

Explicação passo a passo

A
Alternativa A

Alternativa A

A análise do código em C revela como os arrays e ponteiros interagem através da aritmética de ponteiros. O programa inicializa um vetor, cria um ponteiro que aponta para o início desse vetor, avança esse ponteiro e imprime o valor na nova posição.

Análise Detalhada

Vamos examinar linha por linha o comportamento do código fornecido:

  1. Declaração do Vetor:
    int valores[4] = \{10, 20, 30, 40\};
    Cria-se um array de inteiros onde:
  • valores[0] é 10
  • valores[1] é 20
  • valores[2] é 30
  • valores[3] é 40
  1. Inicialização do Ponteiro:
    int *p = valores;
    Em C, o nome de um array (valores) decai automaticamente para um ponteiro que aponta para o primeiro elemento (valores[0]).
  • Portanto, inicialmente, p contém o endereço de memória onde está guardado o valor 10.
  1. Aritmética de Ponteiros:
    p++;
    Esta operação não incrementa o valor armazenado na memória. Ela altera o endereço contido no ponteiro p.
  • Como p é do tipo int*, ele avança de tamanho igual ao de um inteiro (sizeof(int)).
  • Isso faz com que p passe a apontar para o próximo elemento do array (valores[1]).
  1. Imprimindo o Valor:
    printf("\%d", *p);
    O operador de indireção (*) acessa o valor no endereço atual de p.
  • Como p agora aponta para valores[1], o valor retornado é 20.

Verificação das Alternativas

AlternativaAvaliaçãoMotivo
ACorretaIdentifica corretamente o valor impresso (20) e explica a lógica da aritmética de ponteiros (deslocamento para o próximo elemento).
BIncorretaIgnora que p++ modifica o endereço do ponteiro, mantendo-o no mesmo lugar.
CIncorretaO formato \%d imprime o valor decimal, não o endereço. Para endereço, usar-se-ia \%p.
DIncorretaConfunde incremento do ponteiro (p++) com incremento do valor (p++). O valor seria 11 apenas se fosse (p)++.
EIncorretaÉ perfeitamente válido associar o nome de um array a um ponteiro sem usar o operador &.

Conclusão

A alternativa correta é a A, pois a operação p++ move o ponteiro para a próxima posição de memória válida para o tipo de dado (inteiro), fazendo com que *p aponte para o segundo elemento do vetor, que possui o valor 20.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Computação

Ver mais Computação resolvidas

Tem outra questão de Computação?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.