C ti consente di creare un ingorgo di puntatori che puntano tutti alla stessa posizione di memoria. Questo non è un bug. È una caratteristica. Puoi dichiarare tutti i puntatori che desideri e fare in modo che tutti facciano riferimento alla stessa identica variabile.

Considera questo scenario. Hai un numero intero “i”. Hai anche tre puntatori: p, q e r. Imposta “p” in modo che punti a “i”. Quindi imposti “q” in modo che punti a “i”. Infine, imposti “r” in modo che punti al punto in cui punta “p”.

In questo blocco, “r” punta alla stessa cosa che fa “p”. Che è “io”. L’operatore di assegnazione copia l’indirizzo dal lato destro a quello sinistro. Non copia il valore. Copia la posizione.

Dopo l’esecuzione, “i” ha quattro nomi. “io” stesso. “p”. “ q”. E “*r”.

Non esiste alcun limite al numero di puntatori che possono contenere un singolo indirizzo. Puoi incatenarli. Puoi copiarli. Puoi indicarli tutti in una volta.

Perché è importante? È importante perché cambia il modo in cui pensi alla memoria. Un puntatore è semplicemente un’etichetta per una posizione. Se più etichette puntano allo stesso punto, tutte vedono gli stessi dati. Modificare i dati tramite *p. Anche *q lo vede.

Questa flessibilità è potente. È anche pericoloso. Un errore di battitura nell’assegnazione di un puntatore e stai sovrascrivendo dati che non intendevi toccare. Ma per ora, tieni presente che i puntatori sono flessibili. Non possiedono memoria. Lo indicano e basta. E più puntatori possono puntare allo stesso posto senza discutere.