Stack Overflow em Português Asked by Thiago Cerqueira on January 4, 2022
Por que quando tento somar o ultimo ponteiro em mais 15 ele repete o antepenúltimo ponteiro e não soma o o ponteiro *ptr_xi
com mais 15?
int xi;
int *ptr_xi;
void imprimir()
printf("valor de xi = %d n", xi);
printf("valor de &xi = %p n", &xi);
printf("valor de ptr_xi = %p n", ptr_xi);
printf("valor de *ptr_xi = %d nn", *ptr_xi);
}
main()
{
xi = 10;
ptr_xi = ξ
imprimir();
xi = 20;
imprimir();
*ptr_xi = 30;
imprimir();
(*ptr_xi)--;
imprimir();
(*ptr_xi)++;
imprimir();
(*ptr_xi)++;
imprimir();
*(ptr_xi+15);
imprimir();
system ("Pause");
return(0);
}
Em todos os anteriores você não está somando ponteiros, está somando valores apontados por variáveis ponteiros. Isto é muito diferente, faz o que provavelmente queria, mudar os valores associados. Nada disso é necessário ponteiro, pode servir para visualizar o que acontece, mas cuidado para não acharque é assim que se usa ponteiro.
No último é o único que está somando ponteiro. Manipula o ponteiro em si. Ele está indo 15 posições de memória à frente da posição original onde estava o valor que quer manipular. Como é um int
provavelmente (não é certo, depende da plataforma) ele tem 4 bytes, então 15 posições são 60 bytes à frente. O que tem 60 posições à frente? Nesse caso é lixo, algo que você não tem controle, então vai acessar uma área com informação que podemos dizer quase aleatória, ou até onde não pode.
Sempre que tem um ponteiro o valor da variável é um endereço de memória, note que você usou um operador &
para pegar o endereço de memória onde tinha um valor. Quando tem um ponteiro tem duas informações o endereço apontador e o valor que é apontado. Quando você manipula a variável do ponteiro está manipulando o endereço da memória. Quando quer manipular o valor, tem que pegar o endereço, fazer a indireção para o local apontado e lá é que manipula o valor, por isso usou parênteses, para pegar primeiro o local e depois fazer a operação. No último manipulou o local e depois pegou o valor nesse novo local.
Answered by Maniero on January 4, 2022
1 Asked on November 25, 2021 by guickz
1 Asked on November 25, 2021 by zica
2 Asked on November 25, 2021 by rodolpho-chagas
1 Asked on November 25, 2021 by samuel-ives
1 Asked on November 25, 2021 by wander
1 Asked on November 25, 2021 by wls
0 Asked on November 25, 2021 by user198451
1 Asked on November 25, 2021 by bruno-elias-de-souza
1 Asked on November 22, 2021 by gedson-silva
1 Asked on November 22, 2021 by nadson-alexandre
1 Asked on November 22, 2021 by luiz-couto
2 Asked on November 22, 2021 by tiago-martins-peres-2
1 Asked on November 20, 2021 by marllon-nasser
1 Asked on November 19, 2021 by philip-vanstocher
2 Asked on November 19, 2021 by alex-oliveira
Get help from others!
Recent Questions
Recent Answers
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir