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

10 : Allocazione dinamica della memoria Vers . 8.3 – Ottobre 2023
ARITMETICA DEI PUNTATORI
L ' espressione aritmetica dei puntatori si riferisce a un insieme di operazioni aritmetiche applicabili sui valori di tipo puntatore . Tali operazioni hanno lo scopo di consentire un alto livello di flessibilità nell ' accesso a strutture di dati conservati in posizioni contigue della memoria ( per esempio array ma anche record ).
L ' aritmetica dei puntatori è tipica del linguaggio C ed è stata mantenuta in alcuni linguaggi derivati Operatore di somma di un puntatore e un intero
Definizione : L ' operatore di somma di puntatore e intero richiede un operando di tipo puntatore e un operando di tipo intero . Il risultato di questa somma è l ' indirizzo dato dal puntatore incrementato del risultato della moltiplicazione dell ' intero specificato per la dimensione del tipo base del puntatore espressa in byte .
Esempio :
....... p : PUNTATORE A INT
.....
INIZIO
Alloca ( p , 5 * DimensioneDi ( INT )) // L ’ area di memoria allocata nello heap può essere vista ..... // come un ’ array monodimensionale formato da 5 interi FINE
Supponiamo che , dopo la chiamata alla funzione Alloca () il puntatore p assuma valore 1000 e che la dimensione in byte per rappresentare un INT sia pari 4 allora si avrà che :
p vale 1000 ( quindi p punterà alla locazione di memoria di indirizzo 1000 + 0 * DimensioneDi ( INT ) = 1000 ) p + 1 vale 1004 ( quindi p punterà alla locazione di memoria di indirizzo 1000 + 1 * DimensioneDi ( INT ) = 1004 ) p + 2 vale 1008 ( quindi p punterà alla locazione di memoria di indirizzo 1000 + 2 * DimensioneDi ( INT ) = 1008 ) p + 3 vale 1012 ( quindi p punterà alla locazione di memoria di indirizzo 1000 + 3 * DimensioneDi ( INT ) = 1012 ) p + 4 vale 1016 ( quindi p punterà alla locazione di memoria di indirizzo 1000 + 4 * DimensioneDi ( INT ) = 1016 ).
Significato dell ’ operazione
L ' operazione di somma fra puntatore e intero è significativa nel caso in cui il puntatore contenga l ' indirizzo di una cella di un array di dati del tipo base del puntatore .
Infatti , se ad esempio p ( puntatore a intero ) contiene l ' indirizzo della prima cella di un array di interi , p + 1 produce l ' indirizzo della seconda cella dell ’ array , p + 2 l ' indirizzo della terza cella dell ’ array , e via dicendo fino a p +( n-1 ) che conterrà l ’ indirizzo della ennesima cella dell ’ array .
L ' operazione di somma di un intero e di un puntatore consente di ricavare l ' indirizzo di una cella di un array successiva a quella puntata dal puntatore su cui viene applicata l ’ addizione .
L ' aritmetica dei puntatori quindi introduce una sintassi alternativa rispetto a quella tradizionale ( basata sull ’ indice ) per accedere agli elementi di un array .
Segmento HEAP
1000
1004
1008
1012
1016
Segmento STACK
( 1 )
1000
p
Segmento Dati
Segmento Codice
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 16