Considere o programa escrito abaixo em linguagem C: Assinale...

Próximas questões
Com base no mesmo assunto
Q947304 Programação

Considere o programa escrito abaixo em linguagem C:


Imagem associada para resolução da questão

 

Assinale a alternativa correta sobre o resultado impresso.

Alternativas

Comentários

Veja os comentários dos nossos alunos

Com a 2 linha _ #include<conio.h> da erro. 

retirei e deu o resultado certo.

#include <stdio.h>

int main (){

int vetor[]={0,10,20,30,40};

int *p1,*p2;

p1 = &vetor[3];

p2 = vetor;

++p2;

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

}

p1 = & vetor[3]; = 30

p2 = vetor; = 30 incrementando passa para 40

prinft ("%d"\n, *(vetor+(p1-p2))) = 30 + (-40) = 20

Seria este o raciocinio?

P1 aponta para 30; p2 aponta para 10, vetor para zero :)

Vou copiar o raciocínio do colega Paulo Vitor dos Santos abaixo e descrever cada linha:

#include <stdio.h> // inclui a biblioteca padrão de entrada e saída (input output).

#include <conio.h> // inclui a biblioteca de entrada e saída de dados pelo console (console input output), não necessária.

int main() { // função principal do tipo inteiro, porém não está retornando nenhum valor.

int vetor[] = {0, 10, 20, 30, 40}; // cria um vetor e inicia-o com 5 elementos do tipo inteiro.

int *p1, *p2; // cria dois ponteiros.

p1 = &vetor[3]; // o ponteiro p1 aponta para o elemento [3] (quarto elemento) do endereço "vetor[3]". = 30

// o & (e comercial) é um indicador de que queremos o valor que está dentro do endereço "vetor[3]".

p2 = vetor; // o ponteiro p2 aponta para o elemento [0] (primeiro elemento) do endereço "vetor[0]". = 0

// quando não define o índice do vetor, o endereço aponta para o primeiro elemento "vetor[0]".

++p2; // o ponteiro p2 incrementa (desloca) um endereço de "vetor[0]" para "vetor[1]". = 10

// o ponteiro p2 contém o número do endereço de "vetor[0]", que o número a seguir +1 é o endereço de "vetor[1]".

printf("%d\n",*(vetor+(p1-p2))); // mostrar no console (tela) um valor inteiro (%d) e pula uma linha após isso (\n).

// no cálculo dos ponteiros, o * (asterisco) representa operação com os valores dentro dos ponteiros.

// lembrando que o vetor é como se fosse um ponteiro que aponta para o primeiro elemento "vetor[0]".

// *(vetor+(p1-p2)) = (0+(30-10)) = (0+20) = 20

}

Na verdade ele não está operando com os valores, e sim os índices do vetor, logo :

*(vetor+(p1-p2)) = *([0]+ ( [3] - [1] ) ) = [2]

*vetor[2] = 20;

Teste feito com o código, basta alterar o valor da primeira posição que isto ficará comprovado, pois o resultado continuará o mesmo.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo