Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    41

    c# array

    Dato l'array int[] vettore, se assegnassimo ad un altra variabile un array,

    int vettore2=vettore

    ciò che assegniamo è in realtà solo il riferimento all'array. Dunque se creiamo i due seguenti array, e poi variamo il primo elemento di uno dei 2 array, la variazione si rifletterà anche sul primo elemento dell'altro array.

    Non capisco perchè/in che modo avviene la cosa.

  2. #2

    Re: c# array

    Originariamente inviato da Glabrezu
    Non capisco perchè/in che modo avviene la cosa.
    Semplice, un array è un tipo di riferimento, per cui se assegni un riferimento di un array ad un'altra variabile quest'ultima sarà di fatto una specie di alias della prima.
    codice:
    int[] array=new int[10]; //Dichiara una variabile di tipo int[] (=> di fatto un puntatore ad un array di int), crea in memoria un nuovo array in grado di contenere 10 int e assegna un puntatore ad esso ad array
    array[1]=5; //Imposta il secondo elemento dell'array a 5
    int[] array2=array; //Assegna un puntatore all'array anche ad array2. Ora array e array2 puntano allo stesso array in memoria
    array2[1]=10; //Imposta il secondo elemento dell'array - lo stesso array di array - a 10
    Console.WriteLine(array[1]); //Visualizza il contenuto del secondo elemento dell'array, che sarà 10
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    41
    Quindi è come se la terza riga fosse:

    int[] array2=new int[10]

    giusto?

  4. #4
    No, perché così assegni ad array2 un riferimento ad un nuovo array di 10 interi. Nel mio spezzone di codice invece viene assegnato ad array2 un riferimento al medesimo array di array.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    41
    ciò significa ke non ho ben kiaro il concetto di riferimento...

  6. #6
    Allora, quando tu scrivi "new int[10]" stai dicendo al framework: creami un oggetto di tipo array di int di 10 elementi. Il framework lo crea da qualche parte in memoria (nel managed heap) e restituisce l'indirizzo dell'oggetto appena creato (ossia il riferimento ad esso), che viene, nel nostro caso, memorizzato in array. In sostanza, quindi, la variabile che tu dichiari come "int [] array" altro non è che un puntatore ad un oggetto-array, ossia un "contenitore di indirizzo". Quando tu assegni array ad array2 il contenuto di array viene copiato in array2, ma, visto che il contenuto di array è un puntatore all'oggetto-array effettivamente esistente nell'heap, array2 di fatto conterrà tale puntatore, e quindi entrambe le variabili punteranno allo stesso oggetto-array.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    41
    Qualcuno mi può spiegare come e quando si utilizzano gli array a 2 o più dimensioni?

    Nel mio manuale non viene spiegato nulla...


  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quando si utilizzano array a due dimensioni ?

    Quando hai la necessita' di avere valori organizzati in righe e colonne ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    41
    Ok, e a + di 2???

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non c'e' una risposta a questa tua domanda ... servono quando servono ...

    Ad esempio, se ho la necessita' di rappresentare n tabelle di y righe per z colonne, allora utilizzo un array tridimensionale del tipo

    n per y per z

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.