4° Anno TEORIA 2. Allocazione dinamica della memoria | Page 6

10: Allocazione dinamica della memoria Vers. 9.1 – Ottobre 2025
I PUNTATORI
Non tutti i linguaggi di programmazione permettono l’ uso dell’ allocazione dinamica della memoria da parte del programmatore ma è indubbio che questa possibilità fornisca a tali linguaggi una marcia in più.
Il linguaggio C( ed anche il linguaggio il C ++) fortunatamente permettono al programmatore di gestire l’ allocazione dinamica della memoria a disposizione un particolare tipo di dato chiamato puntatore.
Def: una variabile di TIPO PUNTATORE contiene un valore intero( espresso in esadecimale) che rappresenta l’ indirizzo della locazione di memoria nella quale è memorizzato il dato cui si riferisce
In altre parole una variabile di tipo puntatore fisicamente rappresenta una locazione di memoria che contiene l’ indirizzo di un’ altra locazione di memoria.
Con la PSEUDOCODIFICA la dichiarazione di una variabile di tipo puntatore sarà del tipo < variabile _ puntatore >: PUNTATORE A < Tipo _ dato _ puntato >
ALGORITMO Esempio _ 0 PROCEDURA main() p, q: PUNTATORE A REAL a: REAL INIZIO
a � 15.25
p � & a( 1) q � p( 2) Scrivi(* p) Scrivi(* q)
FINE
Graficamente( ipotizzando indirizzi ad 8 BYTE)
// Utilizzando il linguaggio C – Esempio _ 0 # include < stdio. h > # include < stdlib. h >
int main( int argc, char * argv []) { float * p, * q; // N. B. da notare * vicino a q, altrimenti float float a;
a = 15.25; p = & a; //( 1) q = p; //( 2) printf("%. 2f ", * p); printf("\ n %. 2f ", * q);
printf("\ nIndirizzo di a = % x ", & a); // aggiunte per spiegazione printf("\ nvalore di p = % x ", p); printf("\ nvalore di q = % x ", q);
return 0; }
& p( 1)( 2)
AA86FE7C p è una variabile di tipo puntatore allo stesso tipo di a( REAL) il cui valore è pari a AA86
& a = AA86FE7C

15.25

a è una variabile di tipo REAL
Osservazioni importanti
a) Un puntatore quindi non contiene direttamente il dato come le altre variabili di altri tipi, ma contiene un indirizzo di memoria dove reperire il dato.
b) Una variabile puntatore occupa sempre la stessa quantità di memoria indipendentemente dal tipo di dato puntato.
c) Per riferirci al valore del dato puntato da un puntatore sia in modalità STATICA che DINAMICA, DOBBIAMO utilizzare il simbolo * davanti al nome della variabile puntatore d) Per assegnare l’ indirizzo di una cella di memoria ad un puntatore in modalità STATICA
DOBBIAMO utilizzare il simbolo & davanti al nome della variabile mentre in modalità DINAMICA DOBBIAMO utilizzare la chiamata ad un opportuno sottoprogramma.
& q
AA86FE7C q è una variabile di tipo puntatore allo stesso tipo di a( REAL) che di fatto è un ALIAS di p
Autore: Rio Chierego( email: riochierego @ libero. it- sito web: www. riochierego. it) Pag. 6