C permite que um único local de memória tenha vários aliases. Você pode declarar vários ponteiros e fazer com que todos façam referência à mesma variável. Esta não é apenas uma peculiaridade da linguagem. É um recurso fundamental que muda a forma como você gerencia a memória e o acesso aos dados.
Considere este cenário. Você precisa de vários identificadores para a mesma variável inteira. Você pode declarar todos eles e vinculá-los instantaneamente.
Neste bloco, p, q e r são todos ponteiros inteiros. Todos eles apontam para i. A atribuição r = p não copia o valor de i. Ele copia o endereço armazenado em p. Como p contém o endereço de i, r agora também contém o endereço de i.
Uma variável, muitos nomes
Após a execução, há uma variável inteira i na memória. Mas existem quatro maneiras de se referir a esses dados exatos.
i: O nome da variável original.*p: O valor no endereço emp.*q: O valor no endereço emq.*r: O valor no endereço emr.
Eles são idênticos. Mude eu. *p muda. Altere *q. eu muda. Os dados residem em um endereço. Os ponteiros são apenas rótulos.
Não há limite rígido de quantos ponteiros podem conter o mesmo endereço. Você pode encadeá-los indefinidamente. a = &i; b = uma; c=b; d = c; funciona da mesma maneira. Cada atribuição copia o valor do ponteiro. Não cria uma nova cópia dos dados.
“Qualquer número de ponteiros pode apontar para o mesmo endereço.”
Esse recurso é poderoso para passar referências em torno de funções ou construir estruturas vinculadas. Ele mantém o uso da memória restrito. Também introduz um risco. Se você desreferenciar um desses ponteiros, tocará no mesmo byte subjacente. Erros em um alias repercutem em todos eles. Mas quando usado corretamente, esse recurso é uma prática padrão do C.




























