Differenze tra le versioni di "Passaggio di un argomento per 'indirizzo' ad una Funzione"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Il passaggio come argomento ad una Funzione mediante un ''Puntatore'' dell'indirizzo di memoria di una variabile automatica ovvero di un'area di memoria appositamente allocata...")
 
Riga 2: Riga 2:
  
 
Il passaggio degli argomenti per ''indirizzo'' consente di eliminare l'istruzione ''Return'', e di ritornare, così, il valore dalla Funzione ''chiamata'' alla routine principale ''chiamante'' attraverso il parametro medesimo di tipo ''Puntatore'' della Funzione.
 
Il passaggio degli argomenti per ''indirizzo'' consente di eliminare l'istruzione ''Return'', e di ritornare, così, il valore dalla Funzione ''chiamata'' alla routine principale ''chiamante'' attraverso il parametro medesimo di tipo ''Puntatore'' della Funzione.
<BR>Per scrivere in uno dei parametri di tipo ''Puntatore'' della Funzione chiamata il risultato finale delle operazioni compiute dalla Funzione medisma, bisognerà utilizzare i ''Memory Stream''.
+
<BR>Per scrivere in uno dei parametri di tipo ''Puntatore'' della Funzione chiamata il risultato finale delle operazioni compiute dalla Funzione medesima, bisognerà utilizzare i ''Memory Stream''.
  
  

Versione delle 11:14, 15 gen 2017

Il passaggio come argomento ad una Funzione mediante un Puntatore dell'indirizzo di memoria di una variabile automatica ovvero di un'area di memoria appositamente allocata, viene definito "passaggio per Indirizzo". [Nota 1]

Il passaggio degli argomenti per indirizzo consente di eliminare l'istruzione Return, e di ritornare, così, il valore dalla Funzione chiamata alla routine principale chiamante attraverso il parametro medesimo di tipo Puntatore della Funzione.
Per scrivere in uno dei parametri di tipo Puntatore della Funzione chiamata il risultato finale delle operazioni compiute dalla Funzione medesima, bisognerà utilizzare i Memory Stream.


Mostriamo un semplice esempio adeguatamente commentato:

Public Sub Main()
 
 Dim p As Pointer
 
' Allochiamo un'area di memoria:
  p = Alloc(SizeOf(gb.Byte), 2)
   
' Passiamo la viariabile di tipo "Puntatore" alla Funzione secondaria:
  Funzione(p)
   
' Dereferenziamo il "Puntatore", per vedere il valore presente nel primo byte dell'area riservata puntata:
  Print Byte@(p)
   
' Liberiamo la memoria precedentemente allocata:
  Free(p)
  
' Ci assicuriamo che la variabile di tipo "Puntatore" non punti più ad alcuna cella di memoria:
  p = 0
  
End


Private Function Funzione(po As Pointer)
 
 Dim st As Stream
 
' Creiamo una variabile di tipo "Stream" mediante i "Memory Stream", al fine di poter scrivere all'interno dell'area di memoria allocata:
  st = Memory po For Write
  
' Scriviamo un valore di tipo "Byte" nel primo byte dell'area di memoria allocata:
  Write #st, 199 As Byte
  
' Chiudiamo il flusso di dati:
   st.Close
  
End



Note

[1] Su questo argomento vedere anche la seguente pagina della WIKI: http://www.gambas-it.org/wiki/index.php?title=Scrivere_una_Funzione#Passaggio_per_indirizzo