Considere o programa escrito abaixo em linguagem C: Assinale...
Considere o programa escrito abaixo em linguagem C:
Assinale a alternativa correta sobre o resultado impresso.
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