Differenze tra le versioni di "Dereferenziare un Puntatore di Puntatore con le funzioni specifiche di dereferenziazione e con i Memory Stream"
Riga 8: | Riga 8: | ||
Le funzioni direferenziazione sono quelle che derefenziano il ''Puntatore'' nel relativo tipo di dato, al quale ese si riferiscono. | Le funzioni direferenziazione sono quelle che derefenziano il ''Puntatore'' nel relativo tipo di dato, al quale ese si riferiscono. | ||
− | <BR>Esse sono: | + | <BR>Esse sono: [[Byte@|Byte@()]]", "[[Boolean@|Bool@()]]", [[Short@|Short@()]]", "[[Single@|Single@()]]", "[[Int@|Int@()"]], "[[Long@|Long@()]]", "[[Float@|Float@()]]", "[[String@|String@()]]", "[[Pointr@|Pointer@()]]". |
Riga 20: | Riga 20: | ||
Dim st, st2 As Stream | Dim st, st2 As Stream | ||
− | |||
<FONT Color=gray>' ''Valore iniziale, che alla fine della dereferenziazione si dovrà riottenere:''</font> | <FONT Color=gray>' ''Valore iniziale, che alla fine della dereferenziazione si dovrà riottenere:''</font> | ||
b = 44 | b = 44 | ||
Riga 30: | Riga 29: | ||
p2 = VarPtr(p) | p2 = VarPtr(p) | ||
− | |||
<FONT Color=gray>' ''Ora, dereferenziamo il "Puntatore" di "Puntatore" con le apposite funzioni di dereferenziazione:''</font> | <FONT Color=gray>' ''Ora, dereferenziamo il "Puntatore" di "Puntatore" con le apposite funzioni di dereferenziazione:''</font> | ||
Riga 38: | Riga 36: | ||
− | |||
<FONT Color=gray>' ''Ora, dereferenziamo il "Puntatore" di "Puntatore" con i "[[Definizione_ed_uso_dei_Memory_Stream|Memory Stream]]":''</font> | <FONT Color=gray>' ''Ora, dereferenziamo il "Puntatore" di "Puntatore" con i "[[Definizione_ed_uso_dei_Memory_Stream|Memory Stream]]":''</font> | ||
Versione delle 19:07, 20 ago 2022
Un Puntatore di Puntatore è una variabile di tipo Puntatore che punta ad un'altra variabile di tipo Puntatore. E' pertanto una variabile che contiene l'indirizzo di memoria di una variabile che a sua volta contiene l'indirizzo di memoria di una variabile contenente un valore, un dato, oppure di un'area riservata di memoria.
Per "dereferenziare" [Nota 1] un Puntatore di Puntatore, esistono almeno due modalità:
- mediante le apposite funzioni di dereferenziazione posseduta dai tipi nativi di dati;
- mediante i Memory Stream.
Le funzioni direferenziazione sono quelle che derefenziano il Puntatore nel relativo tipo di dato, al quale ese si riferiscono.
Esse sono: Byte@()", "Bool@()", Short@()", "Single@()", "Int@()", "Long@()", "Float@()", "String@()", "Pointer@()".
Vediamo un esempio pratico, nel quale prima verrà generato mediante la funzione VarPtr() un Puntatore di Puntatore, e poi si percorrerà il cammino all'indietro riottenendo il valore puntato da un Puntatore puntato a sua volta da un Puntataore, così come lo abbiamo realizzato, attraverso nella prima modalità con una delle suddette funzioni di dereferenziazione, nella seconda modalità con i Memory Stream. Ad ogni modo, in entrambe le modalità di dereferenziazione il processo avviene con due fasi:
- dereferenziazione del "Puntatore" di "Puntatore", ottenendo il primo "Puntatore" (ossia l'indirizzo di memoria della variabile contnente il dato iniziale);
- dereferenziazione del "Puntatore", ottenendo il valore contenuto dalla variabile contenente il dato di partenza.
Public Sub Main() Dim b, n As Byte Dim p, p2, ritP, sP As Pointer Dim st, st2 As Stream ' Valore iniziale, che alla fine della dereferenziazione si dovrà riottenere: b = 44 ' Creiamo il primo "Puntatore", che punta all'indirizzo di memoria della varianbile "b": p = VarPtr(b) ' Creiamo il secondo "Puntatore", che punta all'indirizzo di memoria della varianbile "p": p2 = VarPtr(p) ' Ora, dereferenziamo il "Puntatore" di "Puntatore" con le apposite funzioni di dereferenziazione: ritP = Pointer@(p2) Print Byte@(ritP) ' Ora, dereferenziamo il "Puntatore" di "Puntatore" con i "Memory Stream": st2 = Memory p2 For Read Read #st2, sP st = Memory sP For Read Read #st, b Print b st.Close st2.Close End
Note
[1] Ricordiamo che "Dereferenziare" significa accedere al valore della variabile puntata dal Puntatore.