Conoscere con i Puntatori i valori contenuti in un vettore

Da Gambas-it.org - Wikipedia.

Un vettore è sostanzialmente un Oggetto, nella cui area di memoria sono contenuti dati del medesimo tipo, ossia che occupano la medesima quantità di memoria (tutti Byte, o tutti Short, o tutti Integer, oppure tutti appartenenti ad un medesimo tipo di Oggetti e così via).

I vettori mettono a disposizione, fra l'altro, la proprietà .Data, che restituisce un Puntatore (ossia l'indirizzo di memoria) ai dati contenuti dal vettore medesimo.

E' possibile spostandoci lungo l'area di memoria puntata da tale Puntatore secondo la quantità di memeoria occupata dal tipo di vettore (Byte[], Short[], etc), leggere i valori contenuti dalla variabile vettoriale.


Conoscere con il Puntatore i valori di un vettore del tipo numerico

In un array del tipo nativo numerico i valori in esso contenuti sono allocati sin dal primo byte dell'area di memoria del vettore medesimo. I valori ovviamente sono posti ad una distanza l'uno dall'altro sulla base della quantità di memoria occupata dal tipo di valore.

Mostriamo un semplice esempio con un vettore di tipo Integer():

Public Sub Main()
 
 Dim ii As Integer[] = [2, 22, 222, 2222, 22222, 222222, 2222222]
 Dim p As Pointer
 Dim b As Byte
   
  p = ii.Data
   
  For b = 0 To ii.Max
' Dereferenziamo il puntatore per ottenere il valore contenuto dalla locazione di memoria puntata:
    Print b;; Int@(p)
' Trattandosi di un vettore di tipo "Intero", spostiamo il puntatore interno all'area di memoria
' pari al numero di byte di memoria occupata dal tipo "Intero":
    p = p + SizeOf(gb.Integer)
  Next
   
End


Conoscere con il Puntatore i valori di un vettore del tipo di un Oggetto

In un array di Oggetti, dereferenziando il Puntatore ai suoi dati attraverso la proprietà .Data, ogni 8 byte sono conservati gli indirizzi di memoria ove sono contenuti gli Oggetti in ciascun elemento del vettore predetto. Un elemento di un vettore di Oggetti è sostanzialmente un Puntatore ad un indirizzo di memoria dell'Oggetto contenuto dal vettore.

Sarà dunque necessario dereferenziare ognuno di quegli indirizzi di memoria per ottenere i valori contenuti dagli Oggetti. Tali valori sono individuabili a cominciare dal 25° byte (indice 24).