Come più puntatori condividono un singolo indirizzo di memoria in C

9

Il C ha una stranezza che mette in difficoltà i principianti ma alimenta sistemi complessi. Puoi puntare dozzine di puntatori allo stesso indirizzo di memoria.

Considera un semplice numero intero “i”. Puoi dichiarare tre puntatori, p, q e r, e collegarli tutti ad essi.

Questa non è magia. È solo una copia di indirizzi. Quando scrivi r = p, il compilatore copia l’indirizzo contenuto da p in r. Lo stesso accade con “q”.

Ora “i” ha quattro nomi. È “io”. È “p”. È “ q”. È “*r”.

Non esiste un limite rigido a questo. Puoi avere centinaia di puntatori che fanno riferimento allo stesso pezzo di RAM. Ciascuna è una variabile distinta nel codice, ma tutte si risolvono nella stessa identica posizione in memoria.

Questo è il motivo per cui le modifiche apportate tramite un puntatore influiscono su tutti gli altri. Modificare *p? Il valore a quell’indirizzo cambia anche per “q” e “r”. È una visione diretta degli stessi dati.

Perché è importante? Perché consente l’aliasing. Il tuo programma può esaminare gli stessi dati attraverso lenti diverse. Un puntatore potrebbe trattarlo come una struttura. Un altro potrebbe trattarlo come un array di byte grezzi. I dati non cambiano. L’interpretazione sì.

Questa flessibilità è potente. È anche il luogo in cui si nascondono gli insetti. Se perdi traccia di quale puntatore si trova, potresti sovrascrivere dati che non volevi. Ma per ora ricorda: i puntatori sono solo indirizzi. E gli indirizzi possono essere condivisi.

Articolo precedenteEditor video gratuito VSDC: il miglior strumento di editing non lineare solo per Windows per 4K?
Articolo successivoPinterest: un motore di bookmarking visivo per la tua vita digitale