Go Down

Topic: Problemi con Array (Read 1 time) previous topic - next topic

MauroTec

Si possono inizializzare array anche senza valore di elementi tra le [], così:
Code: [Select]

int nomearray[] = {10, 20, 30, 40, 50, 60, 70, 80, 90};


Ma è meglio inserire il numero di elementi nelle quadre, perchè se i valori non combaciano ci si accorge subito grazie al compilatore.

La dichiarazione ha un senso logico da intepretare così:

int nomearray[8] ; mi riservi 8 spazi di memoria di cui ognuno è grande 16 bit con segno e a questo spazio gli dai il nome nomearray.
Posizione:       0    1    2    3    4    5    6    7 
locazione       [ ]  [ ]   [ ]  [ ]  [ ]   [ ]  [ ]   [ ]
R:fatto
int valore = nomearray[1]; prendi l'elemento 1 e mettilo nella variabile valore
R:fatto

Se scrivi nomearray[8] con l'intenzione di prendere l'ottavo elemente vai fuori dalla memoria che hai chiesto di riservarti.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

tuxduino

#6
Dec 26, 2012, 04:54 pm Last Edit: Dec 26, 2012, 07:12 pm by tuxduino Reason: 1
Io preferisco (quando possibile) limitare al massimo la ridondanza ed usare l'inizializzazione senza specificare la dimensione (così sono sicuro di non sbagliarmi :-) )

Code: [Select]
int a[] = { 10, 20, 30, 40 };

Quanti elementi ha questo array ? Boh, lo chiedo al compilatore:

Code: [Select]
#define ARY_LEN(a) (sizeof(a)/(sizeof(a[0])))

Code: [Select]
for (byte i = 0; i < ARY_LEN(a); i++) {
    Serial.println(a[i]);
}

hiperformance71

Molte grazie per le spiegazioni, finalmente ho capito la differenza:

Quando dichiaro l'array, il numero tra parentesi quadre è il numero di elementi, quindi se scrivo:  int MyArray[8]; il mio array avrà 8 elementi.

Quando dichiaro ed inizializzo l'array con i parametri tra parentesi graffe, devo mettere il numero di parametri dichiarati, in questo caso 8.

Purtroppo non avevo capito male questo testo:

It also means that in an array with ten elements, index nine is the last element. Hence:
int myArray[10]={9,3,2,4,3,2,7,8,9,11};
     // myArray[9]    contains 11
     // myArray[10]   is invalid and contains random information (other memory address) 

Mi aveva mandato in confusione la terza e quarta riga, che dice che index=9 conterrebbe il numero 11 (corretto) e che con index=10 sarebbe invalido, non avevo afferrato il concetto (sono 10 elementi, se "leggessi" o "scrivessi" dall'/nell' array il mio ultimo index deve essere 9 ovvero il numero di elementi - 1)  FINALMENTE L'HO CAPITA!!!

Molto interessanti quei comandi che permettono di conoscere il numero di elementi di un'array senza averne dichiarato la dimensione, GRAZIE per L'ottima informazione!!

Grazie a Tutti, 

"The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle" - Steve Jobs

Go Up