C permite criar caos ou clareza com ponteiros. Depende de como você olha para isso. A linguagem permite que qualquer número de ponteiros aponte exatamente para o mesmo endereço de memória. Isso não é um bug. É um recurso.
Pegue ‘eu’. Declare p, q e r como ponteiros inteiros. Aponte todos eles para i. O código fica assim:
Bastante simples. Mas o que acontece nos bastidores?
Ponteiros são apenas endereços
No exemplo acima, r não aponta para p. Aponta para o que p aponta. Qual é ‘eu’.
Quando você atribui um ponteiro a outro, o endereço é copiado. O valor do lado direito passa para a variável do lado esquerdo. Após a execução, i tem quatro nomes. eu. *p. *q. *r.
Todos são rótulos diferentes para o mesmo pedaço de RAM. Você pode criar quantos ponteiros desejar. O limite é a sua memória, não o idioma.
Por que isso é importante
Esse comportamento altera a forma como você gerencia os dados. Se você passar um ponteiro para uma função, quaisquer alterações feitas através desse ponteiro afetarão a variável original. Se várias funções mantiverem ponteiros para o mesmo endereço, todas elas verão as mesmas alterações.
Ele cria um estado compartilhado. Útil para armazenamento em cache. Perigoso se você perder a noção de quem está escrevendo onde.
Não há limite para o número de ponteiros que podem conter e apontar para o mesmo endereço.
Essa flexibilidade é poderosa. Também é complicado. Um ponteiro modifica o valor. Todos os outros veem isso imediatamente. Nenhuma sincronização necessária. Apenas acesso à memória bruta.
Pense em depuração. Se uma variável mudar inesperadamente, verifique todos os ponteiros. Qualquer um deles pode ser o culpado. Todos eles têm o mesmo poder. E a mesma responsabilidade.
Não é uma lógica complexa. É uma aritmética simples de ponteiro. Mas as implicações repercutem em todo o seu programa. Um endereço. Muitos nomes. Todos conectados.
























