Differenze tra le versioni di "Assegnare ad un Puntatore la rappresentazione numerica di un indirizzo di memoria contenuto da un altro Puntatore"
(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...') |
|||
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 2: | Riga 2: | ||
Tale indirizzo di memoria è un numero che è facilmente visibile in rappresentazione esadecimale in questo modo: | Tale indirizzo di memoria è un numero che è facilmente visibile in rappresentazione esadecimale in questo modo: | ||
− | + | Public Sub Main() | |
Dim i As Integer | Dim i As Integer | ||
Dim p As Pointer | 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'': | 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 i As Integer | ||
Dim p1, p2 As Pointer | 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: | 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 i As Integer | ||
Riga 39: | Riga 38: | ||
Dim s As String | Dim s As String | ||
− | + | i = 999 | |
− | + | p1 = VarPtr(i) | |
<FONT Color=gray>' ''Estrapoliamo il numero dell'indirizzo di memoria nella sua rappresentazione esadecimale:''</font> | <FONT Color=gray>' ''Estrapoliamo il numero dell'indirizzo di memoria nella sua rappresentazione esadecimale:''</font> | ||
− | + | s = Cstr(p1) | |
<FONT Color=gray>' ''Assegnamo direttamente il numero dell'indirizzo di memoria, dopo averlo convertito in decimale, all'altra variabile di tipo Puntatore:''</font> | <FONT Color=gray>' ''Assegnamo direttamente il numero dell'indirizzo di memoria, dopo averlo convertito in decimale, all'altra variabile di tipo Puntatore:''</font> | ||
− | + | p2 = Val("&" & s) | |
<FONT Color=gray>' ''Verifichiamo il risultato:''</font> | <FONT Color=gray>' ''Verifichiamo il risultato:''</font> | ||
− | Print Int@(p2) | + | Print Int@(p2) |
+ | |||
+ | End | ||
+ | |||
+ | Un'altra modalità simile alla precedente, convertendo l'indirizzo - contenuto dal Puntatore - in un valore di tipo ''Long'': | ||
+ | Public Sub Main() | ||
+ | |||
+ | Dim p1, p2 As Pointer | ||
+ | Dim i As Integer | ||
+ | Dim l As Long | ||
+ | |||
+ | i = 4444 | ||
+ | |||
+ | p1 = VarPtr(i) | ||
+ | Print p1 | ||
+ | |||
+ | <FONT Color=gray>' ''Converte l'indirizzo - contenuto dal Puntatore - in un valore di tipo "Long":''</font> | ||
+ | l = CLong(p1) | ||
+ | |||
+ | p2 = l | ||
+ | Print p2 | ||
+ | |||
+ | Print Int@(p2) | ||
+ | |||
+ | Processus(l) | ||
+ | |||
+ | End | ||
+ | |||
− | + | Private Procedure Processus(vl As Long) | |
+ | |||
+ | Dim p3 As Pointer | ||
+ | |||
+ | Print | ||
+ | Print Hex(vl) | ||
+ | |||
+ | p3 = vl | ||
+ | |||
+ | Print Int@(p3) | ||
+ | |||
+ | End |
Versione attuale delle 03:30, 8 giu 2024
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
Un'altra modalità simile alla precedente, convertendo l'indirizzo - contenuto dal Puntatore - in un valore di tipo Long:
Public Sub Main() Dim p1, p2 As Pointer Dim i As Integer Dim l As Long i = 4444 p1 = VarPtr(i) Print p1 ' Converte l'indirizzo - contenuto dal Puntatore - in un valore di tipo "Long": l = CLong(p1) p2 = l Print p2 Print Int@(p2) Processus(l) End Private Procedure Processus(vl As Long) Dim p3 As Pointer Print Print Hex(vl) p3 = vl Print Int@(p3) End