C permite criar uma situação em que vários ponteiros fazem referência exatamente ao mesmo local na memória. Você pode declarar vários ponteiros e fazer com que todos tenham como alvo a mesma variável. Esta não é apenas uma peculiaridade teórica. Isso acontece constantemente em código real.
Considere este trecho:
Aqui, p pega o endereço de i. q faz o mesmo. Então r assume o valor de p. Como p contém o endereço de i, r agora também aponta para i. O operador de atribuição copia o endereço do lado direito para o lado esquerdo. Não copia os dados. Ele copia o local.
Após a execução dessas linhas, i efetivamente ganhou aliases. Agora você pode acessar o inteiro i através de seu nome original ou através de qualquer um dos ponteiros.
A variável i agora tem quatro nomes: i, *p, *q e *r.
Não há limite rígido de quantos ponteiros podem conter o mesmo endereço. Você pode acorrentá-los tão profundamente quanto precisar. Mude *p e *r vê a mudança. Todos estão olhando para a mesma célula de memória.
Qualquer número de ponteiros pode apontar para o mesmo endereço.
Esse comportamento é fundamental para o funcionamento dos ponteiros. Não é um caso especial. É o padrão. Compreender isso ajuda a evitar confusão durante a depuração. Se você vir valores inesperados, verifique se vários ponteiros estão modificando o mesmo local. Não é mágica. É apenas memória.


























