Puntatori multipli che puntano a un indirizzo di memoria

8

C ti consente di creare una situazione in cui diversi puntatori fanno riferimento esattamente allo stesso punto della memoria. Puoi dichiarare più puntatori e far sì che tutti abbiano come target la stessa variabile. Questa non è solo una stranezza teorica. Succede costantemente nel codice reale.

Considera questo frammento:

Qui, “p” prende l’indirizzo di “i”. “q” fa lo stesso. Quindi r assume il valore di p. Poiché “p” contiene l’indirizzo di “i”, anche “r” ora punta a “i”. L’operatore di assegnazione copia l’indirizzo dal lato destro a quello sinistro. Non copia i dati. Copia la posizione.

Dopo l’esecuzione di queste righe, “i” ha effettivamente acquisito degli alias. Ora puoi accedere all’intero “i” tramite il suo nome originale o tramite uno qualsiasi dei puntatori.

La variabile “i” ora ha quattro nomi: “i”, “p”, “ q” e “*r”.

Non esiste un limite rigido al numero di puntatori che possono contenere lo stesso indirizzo. Puoi incatenarli alla profondità di cui hai bisogno. Cambia *p e *r vede il cambiamento. Stanno tutti guardando la stessa cella di memoria.

Qualsiasi numero di puntatori può puntare allo stesso indirizzo.

Questo comportamento è fondamentale per il funzionamento dei puntatori. Non è un caso speciale. È l’impostazione predefinita. Capire questo aiuta a evitare confusione durante il debug. Se vedi valori imprevisti, controlla se più puntatori stanno modificando la stessa posizione. Non è magia. È solo ricordo.