Differenze tra le versioni di "Assegnare un Puntatore ad una Struttura per dereferenziarlo"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
− | Come sappiamo per dereferenziare un ''Puntatore'', ossia per leggere i valori salvati all'interno dell'area di memoria riservata da esso puntata <SUP>[[[#Note| | + | Come sappiamo per dereferenziare un ''Puntatore'', ossia per leggere i valori salvati all'interno dell'area di memoria riservata da esso puntata <SUP>[[[#Note|nota 1]]]</sup>, possiamo utilizzare in Gambas due risorse: |
* le funzioni specifiche di dereferenziazione dei ''Puntatori'' (ad esempio: ''Byte@()'', ''Short@()'', etc.); | * le funzioni specifiche di dereferenziazione dei ''Puntatori'' (ad esempio: ''Byte@()'', ''Short@()'', etc.); | ||
* i ''Memory Stream''. | * i ''Memory Stream''. | ||
− | Possiamo, però, adoperare anche le ''Strutture'', avendo cura di creare un'apposita ''Struttura'' che <SPAN Style="text-decoration:underline">rispetti rigidamente</span> la dimensione dell'area di memoria riservata puntata dal ''Puntatore'' e il tipo di valori contenuti nei vari membri che compongono la ''Struttura'' medesima. <SUP>[[[#Note| | + | Possiamo, però, adoperare anche le ''Strutture'', avendo cura di creare un'apposita ''Struttura'' che <SPAN Style="text-decoration:underline">rispetti rigidamente</span> la dimensione dell'area di memoria riservata puntata dal ''Puntatore'' e il tipo di valori contenuti nei vari membri che compongono la ''Struttura'' medesima. <SUP>[[[#Note|nota 2]]]</sup> |
Facciamo un semplice esempio: | Facciamo un semplice esempio: | ||
Riga 14: | Riga 14: | ||
− | + | Public Sub Main() | |
Dim <FONT Color=red>p</font> As Pointer | Dim <FONT Color=red>p</font> As Pointer | ||
Riga 44: | Riga 44: | ||
Free(<FONT Color=red>p</font>) | Free(<FONT Color=red>p</font>) | ||
− | + | End | |
Riga 52: | Riga 52: | ||
[2] Per l'uso di questa modalità con le funzioni esterne, vedere: | [2] Per l'uso di questa modalità con le funzioni esterne, vedere: | ||
− | <BR>[[ | + | <BR>[[Dereferenziare senza Memory-Stream un Puntatore ad una Struttura, passato da una funzione esterna]] |
Versione attuale delle 09:41, 5 ago 2023
Come sappiamo per dereferenziare un Puntatore, ossia per leggere i valori salvati all'interno dell'area di memoria riservata da esso puntata [nota 1], possiamo utilizzare in Gambas due risorse:
- le funzioni specifiche di dereferenziazione dei Puntatori (ad esempio: Byte@(), Short@(), etc.);
- i Memory Stream.
Possiamo, però, adoperare anche le Strutture, avendo cura di creare un'apposita Struttura che rispetti rigidamente la dimensione dell'area di memoria riservata puntata dal Puntatore e il tipo di valori contenuti nei vari membri che compongono la Struttura medesima. [nota 2]
Facciamo un semplice esempio:
Public Struct STRUTTURA b As Byte s As Short i As Integer l As Long End Struct Public Sub Main() Dim p As Pointer Dim st As Stream Dim strut As New STRUTTURA ' Procediamo a riempire l'area di memoria riservata con valori di diverso tipo di dati: p = Alloc(Object.SizeOf(strut), 1) st = Memory p For Write Write #st, 99 As Byte Seek #st, 2 Write #st, 999 As Short Write #st, 99999 As Integer Write #st, 9999999 As Long st.Close ' Assegnamo il "Puntatore" alla variabile di tipo della "Struttura" dichiarata. ' Di fatto il "Puntatore" viene dereferenziato attraverso l'impiego della "Struttura." strut = p ' Vediamo il risultato per ciascun valore in console: With strut Print .b Print .s Print .i Print .l End With Free(p) End
Note
[1] Vedere la seguente pagina: Dereferenziazione di un Puntatore
[2] Per l'uso di questa modalità con le funzioni esterne, vedere:
Dereferenziare senza Memory-Stream un Puntatore ad una Struttura, passato da una funzione esterna