Copie di variabili array
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