SóProvas


ID
1565449
Banca
Exército
Órgão
EsFCEx
Ano
2012
Provas
Disciplina
Programação
Assuntos

Considere o programa escrito em linguagem C:


#include <stdio.h>

#include <conio.h>


int main () {


int vetor[ ] = {1, 4, 5, 11, 17};

int *p1, *p2;

p1 = &vetor[2];

p2 = vetor;

printf("%d\n", p1 - p2 );


}


O resultado impresso será

Alternativas
Comentários
  • Eu entendi que a variável p1 recebe o endereço do vetor (&vetor[2]) e a variável p2 aponta para o início do vetor(&vetor[0]).

    No momento da subtração ele pega o endereço de p1 (&vetor[2]) - p2(&vetor[0]), e não o valor que está no endereço de p1 e p2.

  • Complementando a resposta do colega.

    int vetor[ ] = {1, 4, 5, 11, 17};

    Posições -> 0, 1, 2, 3, 4

    p1 = &vetor[2]; // O ponteiro p1 recebe o endereço da posição 2 do vetor

    p2 = vetor; // O ponteiro p2 recebe o endereço da posição atual do vetor, ou seja posição 0

    printf("%d\n", p1 - p2 ); // Efetua a subtração dos endereços de memória e apresenta como valor inteiro

    Poderíamos converter para endereços aleatórios de memória considerando o tamanho de alocação de um inteiro, mas como o código quer apresentar o valor inteiro, que é o mesmo formato do vetor, podemos fazer apenas a subtração dos valores das posições, ou seja:

    2 - 0 = 2

    Gabarito: A