PDA

Visualizza la versione completa : [C] Inizializzazione Array


MircoMick
24-04-2008, 11:53
Ciao a tutti, volevo sapere se è possibile durante l'inizializzarione dell'array

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

int array[10]={1,2, }
per evitare di dover scrivere varie linee tipo

int array[10];
array[1]=1;
array[2]=2;

E' possibile fare questo?
Grazie a tutti!

Gil Mour
24-04-2008, 12:25
Probabilmente no, comunque in generale dipende dal compilatore.

Col compilatore microsoft (quello integrato in vc++) credo tu possa fare una cosa del genere

int a[10] = {1,2};

ma non questa

int a[10] = {1,2,};

o questa

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.

MircoMick
24-04-2008, 12:32
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

Dr_House
24-04-2008, 15:49
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.

MircoMick
24-04-2008, 15:59
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.

Dr_House
24-04-2008, 16:06
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

MircoMick
24-04-2008, 16:10
Scusa, nn mi sono spiegato bene. Per modo analogo intendevo simile a questo

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

Dr_House
24-04-2008, 16:17
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:



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:



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.

MircoMick
24-04-2008, 16:22
Ovvio che nn voglio settarli come null, volevo solo sapere se c'era un modo di scrivere questo
int a[40];
a[0] = 1;
a[1] = 2;
con questo tipo di sintassi

int c[4] = {1,2,3,4};
ma a quanto pare nn c'è. :bhò:

Dr_House
24-04-2008, 16:32
Mo non ho il compilatore sotto mano e non ricordo con esattezza, puoi provare semplicemente



int a[40] = {1,2}:


Non mi ricordo se funziona così è un metodo che io non uso spesso per l'inizializzazione degli array.

Loading