I giochi sono semplici fintanto che si gestiscono array ad una singola dimensione, si complicano quando sono a più dimensioni. E’ infatti possibile che gli elementi di un array siano a loro volta altre array, si parla in questo caso di array di array.
L’utilizzo di array multidimensionali dovrebbe però essere molto ponderato sopratutto quando il numero di elementi é notevole, perché ogni dichiarazione comporta una relativa assegnazione di memoria, determinando allocazioni che possono rivelarsi di grandi dimensioni.
Array bidimensionali
Un array bidimensionale, definita anche matrice, é un array i cui elementi sono a loro volta altre array e queste dimensioni possono concettualmente rappresentare una tabella, composta da righe e colonne.
Dichiarazione
La dichiarazione di un array bidimensionale avviene in modo analogo all’array monodimensionale, tranne che per il fatto che si aggiunge una ulteriore coppia di parentesi quadre:
//Dichiarazione di array bidimensionale
data_type identificatore[numero_righe][numero_colonne];
Come nel caso di array a dimensione singola, i valori inseriti tra parentesi quadre rappresentano costanti intere.
Inizializzazione
Anche un array multidimensionale può essere inizializzato contestualmente alla sua dichiarazione, osservando però la seguente sintassi:
//Dichiarazione ed inizializzazione di array bidimensionale
data_type identificatore[numero_righe][numero_colonne] = {
{value_0, value_1,value_2,…,value_n}, /* NB: inserire virgola */
{value_0, value_1,value_2,…,value_n}
}; /* terminare con ; */
Valgono tutte le regole di inizializzazione già previste per gli array monodimensionali.
Accesso all’array (subscripting)
L’accesso in lettura/scrittura di un array multidimensionale avviene con le medesime modalità delle monodimensionali, eccezion fatta per una coppia di parentesi quadre da aggiungere a suffisso:
//Scrittura
identificatore[indice_riga][indice_colonna] = value;
//Lettura
altra_variabile = identificatore[indice_riga][indice_colonna];
Anche i cicli iterativi sulle variabili multidimensionali non sono poi molto diversi, prevedendo però in questo caso due o più cicli iterativi inclusi l’uno nell’altro.
//Ciclo iterativo per array multidimensionale
//Loop esterno
for (int i = 0; i < lunghezza_riga; i++) {
//Loop interno
for (int y = 0; y < lunghezza_colonna; y++) {
printf(“qualcosa %d”, array[i][y];
}
}