In C, puoi avere più puntatori che puntano tutti alla stessa identica posizione di memoria. Non è un bug. È una caratteristica.
Potresti dichiarare tre puntatori interi: p, q e r. Quindi puoi impostarli tutti in modo che puntino alla stessa variabile intera “i”.
Guarda cosa succede qui. “p” ottiene l’indirizzo di “i”. “q” ottiene anche l’indirizzo di “i”. “r” ottiene qualunque cosa abbia in mano “p”. Questo è l’indirizzo di “i”.
Dopo l’esecuzione di questo codice, hai una situazione strana. “i” ora ha quattro nomi. Puoi accedervi utilizzando i, *p, *q o *r. Si riferiscono tutti allo stesso punto della RAM.
Come funziona l’assegnazione del puntatore
Quando assegni un puntatore a un altro, non stai copiando il valore a cui puntano. Stai copiando l’indirizzo.
r = p non copia l’intero i. Copia l’indirizzo di memoria memorizzato in p. Poiché “p” contiene l’indirizzo di “i”, anche “r” ora contiene l’indirizzo di “i”.
Non esiste alcun limite al numero di puntatori che possono condividere un indirizzo. Potresti avere dieci suggerimenti. O cento. Tutti puntano semplicemente alla stessa cosa.
Perché è importante
Questo comportamento cambia il modo in cui pensi ai dati. Una singola variabile in memoria può avere molti alias. Se modifichi il valore tramite un puntatore, ogni altro puntatore vedrà la modifica.
Ora “i” è 10. “q” è 10. “ r” è 10. Stanno tutti esaminando gli stessi dati.
Questo è utile. Ti consente di passare riferimenti a funzioni senza copiare strutture di grandi dimensioni. Consente a diverse parti del codice di operare sugli stessi dati. Ma significa anche che devi stare attento. La modifica di un puntatore può influire sugli altri.
Idee sbagliate comuni
Alcuni principianti pensano che l’assegnazione dei puntatori copi i dati. Non è così. Copia l’indirizzo.
Altri si chiedono se esiste un limite. Non ce n’è. Il linguaggio ti consente di creare tutti i puntatori di cui hai bisogno. Il compilatore non ti ferma.
Il risultato finale
Più puntatori possono puntare allo stesso indirizzo. Questo è il comportamento C standard. È possibile assegnare i puntatori tra loro. Viene copiato l’indirizzo, non il valore. La variabile rimane la stessa. I nomi semplicemente si moltiplicano.
“Non esiste alcun limite al numero di puntatori che possono contenere (e quindi puntare a) lo stesso indirizzo.”
Questa flessibilità è potente. Richiede disciplina. Ma è fondamentale per il funzionamento del C. Se capisci questo, capisci un concetto fondamentale della gestione della memoria in C.

























