|
Un array viene definito
con la sintassi
tipo
identificatore[numero_elementi];
Es.: int
nome_array[10];
/* array di 10 interi di nome nome_array */
Le variabili array possono essere inizializzate indicando una
lista di costanti fra parentesi graffe. In tal caso e'
possibile omettere il numero degli elementi dell'array. Cosi'
facendo si indica al compilatore che la dimensione dell'array
e' uguale al numero degli elementi inizializzati.
E' invece possibile inizializzare un numero di elementi
inferiore al numero di elementi definiti all'array.
Esempi:
int
a1[4]={10,
20,
30,
40}; |
/* definisco ed inizializzo un array di 4 interi */ |
int
a2[]={10,
20,
30,
40}; |
/* equivalente alla definizione di a1 */ |
int
a3[30]={10,
20,
30,
40}; |
/* definisco un'array di 30 interi, ma ne
inizializzo solamente 4 */ |
char
s1[5]={'C',
'i',
'a',
'o',
'\0'}; |
/* definisco una stringa costruita con un array di
5 caratteri ed inizializzata con "Ciao" */ |
char
s2[]=
"Ciao"; |
/* stessa cosa di s1 */ |
Per potere accedere ad un elemento dell'array, si utilizza un
indice variabile da 0 (per riferirsi al primo elemento)
alla dimensione-1 (per riferirsi all'ultimo
elemento).
Esempio:
...
int a[10]; /* definizione di un array di 10 interi */
int j; /* variabile intera */
...
a[0] = 100; /* assegnamento al primo elemento di a */
...
a[3] = 400; /* assegnamento al quarto elemento di a */
...
a[9] = 1000; /* assegnamento al decimo elemento di a */
...
j = 9;
a[j] = 0; /* azzeramento del decimo elemento di a */
...
j = 10;
a[j] = 30; /* ERRORE GRAVE - undicesimo elemento !! */
a[10] = 30; /* ERRORE GRAVE - undicesimo elemento !! */
E' anche possibile definire array multidimensionali.
La memorizzazione avviene per righe, corrispondenti al primo
indice.
Elementi contigui in memoria sono individuati dalla variazione
piu' veloce dell'ultimo indice.
Per definire l'array multidimensionale si indicano le varie
dimensioni fra parentesi quadre, una di seguito all'altra:
tipo
identificatore
[dimensione1]
[dimensione2]
...;
Es.: int
nome_array
[10]
[2];
/* array di interi di nome nome_array,
formato da 10 righe e 2 colonne */
Per inizializzare un array multidimensionale, si nidificano
le inizializzazioni all'interno delle parentesi graffe; le
inizializzazioni avvengono per righe.
In fase di definizione dell'array e' anche possibile non
indicare la prima dimensione, lasciando il compito al
compilatore di ricavare il numero delle righe in base alle
inizializzazioni effettuate. Le altre dimensioni devono
essere specificate.
Esempi:
int
a1
[3]
[4]={ |
{
10,
20,
30,
40}, |
/* prima riga */ |
{
50,
60,
70,
80}, |
/* seconda riga */ |
{
90,
100,
110,
120} }; |
/* terza riga */ |
int
a1
[][4]={ |
{
10,
20,
30,
40}, |
/* prima riga */ |
{
50,
60,
70,
80}, |
/* seconda riga */ |
{
90,
100,
110,
120} }; |
/* terza riga */ |
Anche in questa situazione gli indici partono da 0
(zero). Pertanto a1[0][0] accede alla prima riga e prima
colonna di a1.
|