24/11/09 18:43
TheKaneB
Ciao,
in C gli array sono indicizzati a partire da zero.
Questo significa che dichiarando
avrai tutti e 4 i tuoi elementi, a partire da 0 fino a 3.
Nel tuo caso avrai i 4 coefficienti, ma il loro "ordine" sarà abbassato di 1 secondo la seguente, semplice, regola:
Quindi, in sostanza, con il seguente codice:
otterrai esattamente i 4 coefficienti, da 0 a 3. Nulla viene perso in questi passaggi!
Se invece tu volessi mettere <= n, oppure volessi accedere direttamente a arrayEsempio[n], andresti a leggere/scrivere su una cella di memoria che non è stata allocata all'interno dell'array. Nel caso migliore andrai a modificare un valore appartenente ad un'altra variabile, nel caso peggiore potresti uscire fuori dal segmento di memoria associato al processo (Segmentation Fault), oppure potresti corrompere delle strutture vitali per l'applicazione (come la lista delle allocazioni di memoria, per esempio), generando quindi una situazione inconsistente; nel primo caso il programma è destinato a crashare, nel secondo potrebbe anche non crashare subito, ma sarebbe fonte di problemi o crash in punti casuali del codice.
Se hai problemi a comprendere questi meccanismi, prova prima a studiare un linguaggio memory safe (come il C# o il Java) e poi a tornare al C che, per quanto riguarda la gestione della memoria, è fin troppo flessibile e permissivo.
Ciao!
in C gli array sono indicizzati a partire da zero.
Questo significa che dichiarando
int arrayEsempio[4];
avrai tutti e 4 i tuoi elementi, a partire da 0 fino a 3.
Nel tuo caso avrai i 4 coefficienti, ma il loro "ordine" sarà abbassato di 1 secondo la seguente, semplice, regola:
int arrayEsempio[4]; int c1, c2, c3, c4; arrayEsempio[0] = c1; /* Primo coefficiente */ arrayEsempio[1] = c2; arrayEsempio[2] = c3; arrayEsempio[3] = c4; /* Ultimo coefficiente, n-1 */
Quindi, in sostanza, con il seguente codice:
for (i=0; i<n; i++) { printf("%d ", arrayEsempio[i]); }
otterrai esattamente i 4 coefficienti, da 0 a 3. Nulla viene perso in questi passaggi!
Se invece tu volessi mettere <= n, oppure volessi accedere direttamente a arrayEsempio[n], andresti a leggere/scrivere su una cella di memoria che non è stata allocata all'interno dell'array. Nel caso migliore andrai a modificare un valore appartenente ad un'altra variabile, nel caso peggiore potresti uscire fuori dal segmento di memoria associato al processo (Segmentation Fault), oppure potresti corrompere delle strutture vitali per l'applicazione (come la lista delle allocazioni di memoria, per esempio), generando quindi una situazione inconsistente; nel primo caso il programma è destinato a crashare, nel secondo potrebbe anche non crashare subito, ma sarebbe fonte di problemi o crash in punti casuali del codice.
Se hai problemi a comprendere questi meccanismi, prova prima a studiare un linguaggio memory safe (come il C# o il Java) e poi a tornare al C che, per quanto riguarda la gestione della memoria, è fin troppo flessibile e permissivo.
Ciao!
aaa
24/11/09 20:25
Matthew
Basta che allochi un elemento in piu' nell'array e poi puoi aggiungere un giro all'interno del ciclo. Pero' se allochi solo 4 elementi e poi scrivi 5 valori, come dice TheKaneB, avrai dei problemi. In qualsiasi modo scrivi nell'array.
aaa