Differenze tra le versioni di "Assegnare ad un vettore i valori contenuti da un'area di memoria puntata da un Puntatore"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "Per assegnare ad un vettore i valori contenuti da un'area di memoria puntata da un ''Puntatore'', è possibile adottare almeno due modalità. ===Uso delle funzioni di Gambas...") |
|||
Riga 28: | Riga 28: | ||
Next | Next | ||
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Verifichiamo in console l'assegnamento:''</font> |
For Each b In bb | For Each b In bb | ||
Print b | Print b | ||
Riga 69: | Riga 69: | ||
memcpy(bb.Data, p, 8) | memcpy(bb.Data, p, 8) | ||
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Verifichiamo in console l'assegnamento:''</font> |
For Each b In bb | For Each b In bb | ||
Print b | Print b |
Versione delle 19:31, 24 feb 2016
Per assegnare ad un vettore i valori contenuti da un'area di memoria puntata da un Puntatore, è possibile adottare almeno due modalità.
Uso delle funzioni di Gambas di dereferenziazione dei Puntatori
La prima modalità prevede di assegnare ad ogni elemento del vettore i valori dell'area di memoria riservata, puntata dal Puntatore, dereferenziando man mano il Puntatore medesimo.
Mostriamo un semplice esempio pratico:
Public Sub Main() Dim p As Pointer Dim st As Stream Dim b As Byte Dim bb As New Byte[] ' Allochiamo un'area di memoria riservata pari ad 8 byte: p = Alloc(8) ' Ai fini di questo esempio scriviamo alcuni dati nell'area di memoria allocata: st = Memory p For Write For b = 1 To 8 Write #st, b * 10 As Byte Next st.Close ' Assegnamo agli elementi del vettore i valori presenti nell'area di memoria allocata: For b = 0 To 7 bb.Push(Byte@(p + CInt(b))) Next ' Verifichiamo in console l'assegnamento: For Each b In bb Print b Next Free(p) End
Uso della funzione esterna memcpy() di C
Possiamo anche utilizzare la funzione esterna memcpy() di C, richiamando la libreria libc.so.6 . Mostriamo un semplice esempio pratico:
Library "libc:6" ' void *memcpy (void * __dest, const void * __src, size_t __n) ' Copy N bytes of SRC to DEST. Private Extern memcpy(dest As Pointer, __src As Pointer, n As Long) As Pointer Public Sub Main() Dim p As Pointer Dim st As Stream Dim b As Byte Dim bb As New Byte[8] ' Allochiamo un'area di memoria riservata pari ad 8 byte: p = Alloc(8) ' Ai fini di questo esempio scriviamo alcuni dati nell'area di memoria allocata: st = Memory p For Write For b = 1 To 8 Write #st, b * 10 As Byte Next st.Close ' Con la funzione esterna "memcpy()" copiamo nel vettore gli 8 valori presenti nell'area di memoria allocata: memcpy(bb.Data, p, 8) ' Verifichiamo in console l'assegnamento: For Each b In bb Print b Next Free(p) End