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

10 : Allocazione dinamica della memoria Vers . 8.3 – Ottobre 2023
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 >
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