Puntatori multipli che puntano allo stesso indirizzo in C

9

C consente a una singola posizione di memoria di avere più alias. Puoi dichiarare più puntatori e fare in modo che tutti facciano riferimento alla stessa variabile. Questa non è solo una stranezza della lingua. È una caratteristica fondamentale che cambia il modo in cui gestisci la memoria e l’accesso ai dati.

Considera questo scenario. Sono necessari più handle per la stessa variabile intera. Puoi dichiararli tutti e collegarli immediatamente.

In questo blocco, p, q e r sono tutti puntatori a numeri interi. Puntano tutti a “i”. L’assegnazione r = p non copia il valore di i. Copia l’indirizzo memorizzato in “p”. Poiché “p” contiene l’indirizzo di “i”, anche “r” ora contiene l’indirizzo di “i”.

Una variabile, molti nomi

Dopo l’esecuzione, c’è una variabile intera “i” in memoria. Ma ci sono quattro modi per fare riferimento a quei dati esatti.

  1. i : il nome della variabile originale.
  2. *p : il valore dell’indirizzo in p.
  3. *q : il valore all’indirizzo in q.
  4. *r : il valore dell’indirizzo in r.

Sono identici. Cambia “i”. “p” cambia. Cambia “ q”. “i” cambia. I dati risiedono in un indirizzo. I puntatori sono solo etichette.

Non esiste un limite rigido al numero di puntatori che possono contenere lo stesso indirizzo. Puoi concatenarli indefinitamente. a = &i; b = un; c = b; d = c; funziona allo stesso modo. Ogni assegnazione copia il valore del puntatore. Non crea una nuova copia dei dati.

“Qualsiasi numero di puntatori può puntare allo stesso indirizzo.”

Questa funzionalità è potente per passare riferimenti attorno a funzioni o creare strutture collegate. Mantiene stretto l’utilizzo della memoria. Introduce anche un rischio. Se dereferenzia uno di questi puntatori, tocchi lo stesso byte sottostante. Gli errori in uno pseudonimo si ripercuotono su tutti loro. Ma se utilizzata correttamente, questa funzionalità è una pratica C standard.