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
-
O código aloca um vetor de 10 inteiros:
v = (int*)malloc(10 * sizeof(int)). -
A variável
ainicia 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:- , , , ..., .
- Em seguida:
int *x = v + 2;fazxapontar para o endereço do terceiro elemento do vetor (pois ponteiros em C avançam em “unidades” do tipo apontado, aquiint).- Logo,
*x = *(v+2) = v[2] = 3.
Portanto, o printf exibirá 3.
Carregando…