Vários ponteiros apontando para um endereço de memória

6

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.