Vedere e modificare con i Puntatori un byte costituente il valore di una variabile

Da Gambas-it.org - Wikipedia.

Avendo un Puntatore ad una variabile, è possibile vedere e modificare uno o più byte costituenti il valore contenuto da tale variabile.


Mostriamo un esempio, nel quale si ha una variabile di tipo Intero contenente un valore numerico. Si vedrà un byte costituente tale valore mediante la funzione specifica di dereferenziazione del Puntatore ad una variabile di tipo Intero, e successivamente lo si modificherà mediante i Memory Stream:

Public Sub Main()

 Dim i As Integer
 Dim p As Pointer
 Dim st As Stream

' Abbiamo una variabile di tipo "Intero" con il seguente valore:
  i = &11223344

' La puntiamo assegnando il suo indirizzo di memoria ad una variabile di tipo "Puntatore":
  p = VarPtr(i)

' Vediamo, per esempio, il secondo byte (hex = 22) costituente il valore contenuto dalla variabile de la variable
' (si tenga presente che l'ordine dei byte dell'area di memoria puntata dal "Puntatore" è "Little-Endian"):
  p = p + 2
  Print Hex(Byte@(p))


' Ora cambiamo quel secondo byte del valore contenuto dalla variabile mediante i "Memory Stream":
  st = Memory p For Write
  Write #st, &55 As Byte
  st.Close
 
' Vediamo il nuovo secondo byte del valore contenuto dalla variabile:
  Print Hex(Byte@(p))

' Vediamo (con due modalità) il nuovo valore contenuto dalla variabile "i":
  p = p - 2
  Print Hex(Int@(p)), Hex(i)

End