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