Differenze tra le versioni di "Copie di variabili array"

Da Gambas-it.org - Wikipedia.
Riga 12: Riga 12:
  
 
* per attribuzione mediante il metodo ''.Copy()'' proprio delle varibili vettoriali.
 
* per attribuzione mediante il metodo ''.Copy()'' proprio delle varibili vettoriali.
In questo caso la variabile vettoriale ''array_2'' punta ad un indirizzo ''diverso'' da quello dela variabile ''array_1''. Pertanto, le due varibili vettoriali risultano essere indipendenti: le modifiche apportate ai valori o agli elementi di una variabile non inciderà anche sull'altra.
+
In questo caso la variabile vettoriale ''array_2'' punta ad un indirizzo ''diverso'' da quello dela variabile ''array_1''. Pertanto, le due varibili vettoriali risultano essere indipendenti: le modifiche apportate ai valori o agli elementi di una variabile non incideranno, non avranno effetto anche sull'altra.
  
  

Versione delle 18:16, 13 mar 2016

Per fare una o più copie di una variabile vettoriale, sono possibili almeno due modalità. A seconda della modalità adottata si avrà una situazione diversa.


La copia di un array può avvenire:

  • per assegnazione diretta di una variabile vettoriale ad un'altra variabile vettoriale

Si può fare una copia di un array, assegnando la variabile ad un'altra variabile:

array_2 = array_1

In questo caso la variabile vettoriale array_2 punta al medesimo indirizzo di memoria della variabile array_1. Hanno nome identificatore diverso, ma puntano alla medesima area di memoria della Struttura CARRAY definita nei sorgenti Gambas, e più precisamente nel file header "gbx_c_array.h".
Ciò significa che, avendo le due variabili array il medesimo indirizzo, qualunque variazione apportata ai dati contenuti da una delle due variabili, o apportata anche agli elementi di una qualsiasi delle due variabili, si rifletterà anche sui dati e/o sugli elementi contenuti nell'altra variabile.


  • per attribuzione mediante il metodo .Copy() proprio delle varibili vettoriali.

In questo caso la variabile vettoriale array_2 punta ad un indirizzo diverso da quello dela variabile array_1. Pertanto, le due varibili vettoriali risultano essere indipendenti: le modifiche apportate ai valori o agli elementi di una variabile non incideranno, non avranno effetto anche sull'altra.


Mostriamo quanto sopra esposto con un semplice esempio pratico:

Public Sub Main()
 
 Dim bb, cc As Byte[]
 
   Print "Effettuiamo la prova con l'assegnazione diretta di un array ad un altro: "
   
   bb = [11, 22, 33, 44]
       
' Assegnamo una variabile array ad un'altra:
   cc = bb
  
' Vediamo l'indirizzo di memoria di ciascuna variabile vettoriale:
   Print Object.Address(bb), Object.Address(cc)
  
' Vediamo quanti elementi posseggono entrambe le variabili:
   Print bb.Count, cc.Count
   
' Incrementiamo il numero di elementi della variabile "bb":
   bb.Push(55)
   
' Vediamo ora quanti elementi posseggono entrambe le variabili:
   Print bb.Count, cc.Count
   
' Incrementiamo il numero di elementi della variabile "cc":
   cc.Push(66)
  
' Vediamo ora quanti elementi posseggono entrambe le variabili:
   Print bb.Count, cc.Count
   cc.Clear
   
   Print "---------------------------"
   
   Print "\nEffettuiamo ora la prova con il metodo '.Copy()': "
   
   bb = [11, 22, 33, 44]
   
' Effettuiamo una copia della variabile "bb" mediante il suo metodo ".Copy()":
   cc = bb.Copy(0, bb.Count)
   
' Vediamo l'indirizzo di memoria di ciascuna variabile vettoriale:
   Print Object.Address(bb), Object.Address(cc)
   
' Vediamo quanti elementi posseggono entrambe le variabili:
   Print bb.Count, cc.Count
   
' Incrementiamo il numero di elementi della variabile "bb":
   bb.Push(55)
   
' Vediamo ora quanti elementi posseggono entrambe le variabili:
   Print bb.Count, cc.Count, " !!!"
   
' Incrementiamo il numero di elementi della variabile "cc":
   cc.Push(66)
   
' Vediamo ora quanti elementi posseggono entrambe le variabili:
   Print bb.Count, cc.Count
   
End