C permite criar um engarrafamento de ponteiros, todos direcionados ao mesmo local de memória. Isso não é um bug. É um recurso. Você pode declarar quantos ponteiros desejar e fazer com que todos façam referência exatamente à mesma variável.
Considere este cenário. Você tem um número inteiro i. Você também tem três ponteiros: p, q e r. Você define p para apontar para i. Então você define q para apontar para i. Finalmente, você define r para apontar para onde p está apontando.
Neste bloco, r aponta para a mesma coisa que p faz. Qual é ‘eu’. O operador de atribuição copia o endereço do lado direito para o lado esquerdo. Não copia o valor. Ele copia o local.
Após a execução, i tem quatro nomes. eu em si. *p. *q. E *r.
Não há limite para quantos ponteiros podem conter um único endereço. Você pode acorrentá-los. Você pode copiá-los. Você pode apontá-los todos de uma vez.
Por que isso importa? É importante porque muda a forma como você pensa sobre a memória. Um ponteiro é apenas um rótulo para um local. Se vários rótulos apontarem para o mesmo local, todos verão os mesmos dados. Altere os dados através de *p. *q também vê.
Essa flexibilidade é poderosa. Também é perigoso. Um erro de digitação em uma atribuição de ponteiro e você está sobrescrevendo dados que não pretendia alterar. Mas, por enquanto, entenda apenas que os ponteiros são flexíveis. Eles não possuem memória. Eles apenas apontam para isso. E vários ponteiros podem apontar para o mesmo lugar sem discussão.



















