Ao executar o programa abaixo:

Questão

Ao executar o programa abaixo:

Imagem 1
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int tamanho = sizeof(int);
    int *v, a=1;
    v = (int *)malloc(10 * tamanho);
    for (int i = 0; i < 10; i++)
        v[i] = a++;
    int *x = v + 2;
    printf("\nValor armazenado em x é: %d\n", *x);
}

Alternativas

a. Valor armazenado em x é: 0

b. Valor armazenado em x é: 1

c. Valor armazenado em x é: 2

Resposta certa

d. Valor armazenado em x é: 3

e. Valor armazenado em x é: 4

Explicação

  1. O código aloca um vetor de 10 inteiros: v = (int*)malloc(10 * sizeof(int)).

  2. A variável a inicia em 1. No laço:

  • Em cada iteração é feito v[i] = a++, ou seja, primeiro atribui e depois incrementa.
  • Assim, ao final do for, o vetor fica:
    • v[0]=1v[0]=1, v[1]=2v[1]=2, v[2]=3v[2]=3, ..., v[9]=10v[9]=10.
  1. Em seguida:
  • int *x = v + 2; faz x apontar para o endereço do terceiro elemento do vetor (pois ponteiros em C avançam em “unidades” do tipo apontado, aqui int).
  • Logo, *x = *(v+2) = v[2] = 3.

Portanto, o printf exibirá 3.

Carregando…

Questões relacionadas

Ver últimas questões