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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP