Differenze tra le versioni di "Copie di variabili array"
Riga 8: | Riga 8: | ||
array_2 = array_1 | array_2 = array_1 | ||
In questo caso la variabile vettoriale ''array_2'' punta al <SPAN Stle="text-decoration:underline">medesimo</span> 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''". | In questo caso la variabile vettoriale ''array_2'' punta al <SPAN Stle="text-decoration:underline">medesimo</span> 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''". | ||
− | <BR>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 <SPAN Stle="text-decoration:underline">qualsiasi</span> delle due variabili. | + | <BR>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 <SPAN Stle="text-decoration:underline">qualsiasi</span> delle due variabili, si rifletterà anche sui dati e/o sugli elementi contenuti nell'altra variabile. |
Versione delle 17:12, 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 inciderà 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