Ottenere il puntatore ad una variabile vettoriale

Da Gambas-it.org - Wikipedia.

Per ottenere il "Puntatore" ad una variabile vettoriale, bisognerà considerare due casi:

1) se la variabile vettoriale è dichiarata come globale con la parola New;

2) se la variabile vettoriale è dichiarata come globale inglobata: vettore[num_elementi]; e quindi priva di parola chiave New.


Caso in cui il vettore è dichiarato con la parola New

Se la variabile vettoriale è dichiarata e creata con la parola chiave New, allora, per ottenerne l'indirizzo di memoria, basterà usare il metodo .Address() della Classe Object.


Esempio:

Public Sub Main()
 
 Dim bb As New Byte[]
 Dim p As Pointer
 
  p = Object.Address(bb)
  
  Print p
  
End


Un'altra modalità prevede un codice un po' più complesso. Lo mostriamo per curiosità.

 Public Sub Main()
 
 Dim bb As New Byte[]
 Dim s As String
 Dim p As Pointer
 
  s = Str(bb)
  s = Scan(s, "*0x*)")[1]
  p = Val("&" & s)
  
  Print p
  
End


Caso in cui il vettore è istanziato esplicitmente

Con le medesime modalità, viste sopra, si otterrà un Puntatore ad una varibile vettoriale istanziata esplicitamente.

Mostriamo un esempio con la prima modalità vista:

Public Sub Main()
 
 Dim bb As Byte[] = [11, 22, 33, 44]
 Dim p As Pointer
 
  p = Object.Address(bb)
  
  Print p
  
End


Caso in cui la variabile vettoriale è dichiarata globale di tipo inglobato

Se la variabile vettoriale è dichiarata come globale di tipo inglobato, allora, per ottenerne l'indirizzo di memoria, si potrà utilizzare sia la funzione VarPtr() che il metodo .Address() della Classe Object.

Esempio:

Private bb[4] As Byte
Private ii[4] As Integer


Public Sub Main()
 
 Dim p1, p2 As Pointer
 
  p1 = VarPtr(bb)
  p2 = Object.Address(ii)
  
  Print p1
  Print p2
  
End