Assegnare ad un Puntatore la rappresentazione numerica di un indirizzo di memoria contenuto da un altro Puntatore

Da Gambas-it.org - Wikipedia.
Versione del 5 giu 2015 alle 19:05 di Vuott (Discussione | contributi) (Creata pagina con 'Come è noto la variabile di tipo ''Puntatore'' contiene l'indirizzo di memoria di una variabile. Tale indirizzo di memoria è un numero che è facilmente visibile in rappres...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Come è noto la variabile di tipo Puntatore contiene l'indirizzo di memoria di una variabile.

Tale indirizzo di memoria è un numero che è facilmente visibile in rappresentazione esadecimale in questo modo:

Public Sub Main()

 Dim i As Integer
 Dim p As Pointer

  i = 999

  p = VarPtr(i)

  Print p;; CStr(p)

End

Sappiamo che, per assegnare un'indirizzo di memoria, contenuto da un Puntatore, ad un altra variabile di tipo Puntatore, è sufficiente procedere con un normale assegnamento fra le due variabili Puntatore:

Public Sub Main()

 Dim i As Integer
 Dim p1, p2 As Pointer

  i = 999

  p1 = VarPtr(i)

  p2 = p1

  Print p1;; p2

End


E' possibile assegnare l'indirizzo di memoria, contenuto da una variabile Puntatore, ad altra variabile Puntatore anche attraverso la diretta assegnazione della mera rappresentazione numerica dell'indirizzo di memoria medesimo:

Public Sub Main()

 Dim i As Integer
 Dim p1, p2 As Pointer
 Dim s As String

  i = 999

  p1 = VarPtr(i)

' Estrapoliamo il numero dell'indirizzo di memoria nella sua rappresentazione esadecimale:
  s = Cstr(p1)

' Assegnamo direttamente il numero dell'indirizzo di memoria, dopo averlo convertito in decimale, all'altra variabile di tipo Puntatore:
  p2 = Val("&" & s)

' Verifichiamo il risultato:
  Print Int@(p2)

End