C ti consente di creare caos o chiarezza con la memoria. Puoi avere dozzine di puntatori che puntano tutti allo stesso identico punto nella RAM. Questo non è un bug. È una caratteristica.
Considera uno scenario in cui dichiari un numero intero “i”. Quindi crei tre puntatori interi: p, q e r.
Il codice fa esattamente quello che potresti aspettarti. “p” prende l’indirizzo di “i”. “q” fa lo stesso. “r” copia qualunque cosa contenga “p”. Poiché “p” contiene l’indirizzo di “i”, anche “r” punta a “i”.
Dopo aver eseguito queste assegnazioni, hai una variabile con quattro nomi. “i” è l’originale. *p vi accede. *q vi accede. *r vi accede.
Come funziona l’assegnazione dei puntatori
La chiave qui è capire cosa succede durante l’assegnazione. Quando scrivi q = &i, non stai copiando il valore di i. Stai copiando la posizione di “i”.
Quando scrivi r = p, copi l’indirizzo da p a r. Non viene allocata nuova memoria. Nessun dato viene duplicato. Il valore dell’indirizzo si sposta da una variabile puntatore a un’altra.
Ciò significa che non esiste un limite rigido al numero di puntatori che possono contenere lo stesso indirizzo. Puoi creare mille puntatori che puntano tutti a “i”. Si riferiscono tutti alla stessa posizione di memoria.
Non c’è limite al numero di puntatori che possono contenere (e quindi puntare a) lo stesso indirizzo.
Questo comportamento è fondamentale per il modo in cui il C gestisce la memoria. Consente strutture dati flessibili come elenchi collegati e alberi. Consente inoltre argomenti di funzioni efficienti. Passa un puntatore invece di una copia. Modifica direttamente i dati originali.
Ma introduce anche dei rischi. Cambia da “i” a “p”. Guarda da “i” a “q”. Il cambiamento è visibile ovunque. C’è solo una fonte di verità.
La variabile “i” ora ha quattro nomi. “io”. “p”. “ q”. “*r”.
Ecco come funziona il C. Hai accesso diretto agli indirizzi di memoria. È possibile creare alias dati liberamente. Devi solo stare attento a ciò che cambi.




























