Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C] Inizializzazione Array

    Ciao a tutti, volevo sapere se è possibile durante l'inizializzarione dell'array
    codice:
    int array[10]={1,2,3,4,5,6,7,8,9,0};
    assegnare dei valori solo ad alcuni termini, ad esempio con una sintassi del genere
    codice:
    int array[10]={1,2,  }
    per evitare di dover scrivere varie linee tipo
    codice:
    int array[10];
    array[1]=1;
    array[2]=2;
    E' possibile fare questo?
    Grazie a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Probabilmente no, comunque in generale dipende dal compilatore.

    Col compilatore microsoft (quello integrato in vc++) credo tu possa fare una cosa del genere
    codice:
    int a[10] = {1,2};
    ma non questa
    codice:
    int a[10] = {1,2,};
    o questa
    codice:
    int a[10] = {1,2, ,4, , ,6};
    Ma in generale, se posso permettermi, un approccio di questo tipo è sbagliato. Il C non è un linguaggio di scripting, è un linguaggio di livello molto basso e delegare la gestione della memoria all'arbitrarietà del compilatore può essere rischioso e in alcuni casi disastroso.

    Cioè, nel caso del primo esempio, che probabilmente visual studio ti compilerà, finchè non inizializzi esplicitamente le celle da 2 a 9 il dato in esse contenuto è un dato arbitrario. Può capitare che inavvertitamente, o per errore, o per mille altri motivi, tu vada a leggere quella variabile trovandoci dentro della spazzatura dando luogo a comportamenti inaspettati.

    Ti suggerisco in generale una accurata ed esplicita gestione della memoria.

  3. #3
    Si, hai ragione, è sempre meglio inizializzarli tutti.
    Nel mio caso uso l'array per scriverci la serie di fibonacci , quindi i primi 2 numeri li inserisco io e li altri li faccio scrivere ad un ciclo in automatico.
    Ti ringrazio per i suggerimenti.

    Ah, cmq come compilarore uso gcc sotto linux

  4. #4
    La sintassi esposta sopra ovvero:

    int c[4] = {1,2,3,4};

    non è altro che una serie di assegnazioni, scrivere:

    int c[4] = {1,2,,};

    è come se tu scrivessi:

    int c[4];

    c[1] = 1;
    c[2] = 2;
    c[3] = ;
    c[4] = ;

    ed ovviamente è un errore.

  5. #5
    int c[4];

    c[1] = 1;
    c[2] = 2;
    c[3] = ;
    c[4] = ;
    Ok, è un errore così, ma c'è un modo analogo per inizializzare solo i primi 2 valori senza specificare tutti gli altri?

    Nel mio caso ho un'array di 40 valori, nn vorrei dover scrivere 38 zeri, dato che poi ho un ciclo che assegna i giusti valori agli altri.

  6. #6
    codice:
    int a[40];
    a[0] = 1;
    a[1] = 2;
    for (int i = 2; i <40; i++)
         a[i] = 0;
    Questo codice ti inizializza l'array per la serie di Fibonacci

  7. #7
    Scusa, nn mi sono spiegato bene. Per modo analogo intendevo simile a questo

    int c[4] = {1,2,,};

  8. #8
    semplicemente settando i primi due valori. Ma è comunque sia una cosa controsenso perché le variabili integer non si settano a "" ovvero concetto di null ma a un valore quindi come la metti metti è un errore.

    Non esiste un modo analogo, se devi fare la serie di fibonacci e devi inizializzare l'array. quello che devi fare è settare tutti i valori per una programmazione corretta quindi o fai:

    codice:
    int a[40] = {1,2,0,0,....................,0}; //dove i puntini sono i ,0,
    O se no usi il ciclo che ti ho scritto poco fa.

    altrimenti fai:

    codice:
    int a[40];
    a[0] = 1;
    a[1] = 2;
    e lasci le altre celle della memoria così come stanno perché settarle a un valore nullo non ha senso sia logicamente che da punto di vista del compilatore ed è un errore.

  9. #9
    Ovvio che nn voglio settarli come null, volevo solo sapere se c'era un modo di scrivere questo
    codice:
    int a[40];
    a[0] = 1;
    a[1] = 2;
    con questo tipo di sintassi
    codice:
    int c[4] = {1,2,3,4};
    ma a quanto pare nn c'è.

  10. #10
    Mo non ho il compilatore sotto mano e non ricordo con esattezza, puoi provare semplicemente

    codice:
    int a[40] = {1,2}:
    Non mi ricordo se funziona così è un metodo che io non uso spesso per l'inizializzazione degli array.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.