Puntatori multipli che puntano a un indirizzo di memoria

9

C ti consente di fare qualcosa che a prima vista potrebbe sembrare confuso. È possibile avere più puntatori che fanno riferimento esattamente alla stessa posizione di memoria. Non è un bug. È una caratteristica.

Considera questa configurazione. Dichiari un numero intero “i”. Quindi dichiari tre puntatori: p, q e r.

Guarda cosa succede qui. “p” prende l’indirizzo di “i”. “q” fa lo stesso. A r non interessa direttamente i. Copia semplicemente qualunque indirizzo contenga p. Dato che “p” punta a “i”, anche “r” finisce per puntare a “i”.

Dopo l’esecuzione di queste righe, non hai tre variabili separate in giro. Hai una variabile con quattro alias.

  • “io”.
  • “*p”.
  • “*q”.
  • “*r”.

Sono tutti la stessa cosa.

Ciò accade perché l’assegnazione del puntatore è una copia del valore dell’indirizzo. L’indirizzo del lato destro si sposta nella variabile del lato sinistro. Non viene eseguita alcuna copia approfondita dei dati. Viene trasferita solo la posizione di memoria.

Non c’è limite a questo. Puoi concatenare tutti i puntatori che desideri. a = b; c = b; d = c; Non importa. Puntano tutti allo stesso punto nella RAM.

Non c’è limite al numero di puntatori che possono contenere e quindi puntare allo stesso indirizzo.

Perché è importante? Significa che puoi passare i riferimenti liberamente. Puoi creare alias dati per diverse parti del tuo codice da utilizzare. È possibile creare strutture dati complesse in cui i nodi fanno riferimento tra loro.

Significa anche cautela. Cambia “p” in “5”. Cosa succede a “i”? Diventa “5”. Cambiare “ q”? “i” cambia di nuovo. Tutti gli alias vedono lo stesso aggiornamento.

Questo è C di base. Ma è potente. E pericoloso se perdi traccia di quale puntatore è quale.