C tem uma peculiaridade que confunde os iniciantes, mas alimenta sistemas complexos. Você pode apontar dezenas de ponteiros para o mesmo endereço de memória.
Considere um número inteiro simples i. Você pode declarar três ponteiros – p, q e r – e vinculá-los todos a ele.
Isso não é mágica. É apenas cópia de endereço. Quando você escreve r = p, o compilador copia o endereço mantido por p em r. O mesmo acontece com q.
Agora i tem quatro nomes. É ‘eu’. É *p. É *q. É *r.
Não há limite rígido para isso. Você pode ter centenas de ponteiros referenciando o mesmo pedaço de RAM. Cada uma é uma variável distinta em seu código, mas todas são resolvidas exatamente no mesmo local na memória.
É por isso que as alterações feitas através de um ponteiro afetam todos os outros. Modificar *p? O valor nesse endereço também muda para q e r. É uma visão direta dos mesmos dados.
Por que isso importa? Porque permite alias. Seu programa pode analisar os mesmos dados através de lentes diferentes. Um ponteiro pode tratá-lo como uma estrutura. Outro pode tratá-lo como uma matriz de bytes brutos. Os dados não mudam. A interpretação sim.
Essa flexibilidade é poderosa. É também onde os insetos se escondem. Se você perder o controle de qual ponteiro está onde, poderá substituir dados que não pretendia. Mas, por enquanto, lembre-se: ponteiros são apenas endereços. E os endereços podem ser compartilhados.




















