Con gli array in C puoi salvare un record di dati correlati fra loro senza dover creare più variabili. Di norma gli array sono mo­no­di­men­sio­na­li, ma è possibile espan­der­li fino a un numero di di­men­sio­ni a piacere. In questo articolo ti mostriamo come creare e uti­liz­za­re gli array 2D in C in modo efficace.

Le nozioni di base degli array in C

Per creare e pa­dro­neg­gia­re gli array 2D in C in modo efficace, devi conoscere in­nan­zi­tut­to alcuni aspetti fon­da­men­ta­li degli array nel lin­guag­gio di pro­gram­ma­zio­ne C. Come in molti altri linguaggi, gli array sono un blocco di memoria in cui è possibile me­mo­riz­za­re più valori dello stesso tipo di dati. In questo modo è possibile me­mo­riz­za­re e riunire più valori in un unico nome di variabile. Le di­men­sio­ni dell’array devono essere note in fase di com­pi­la­zio­ne e non possono essere mo­di­fi­ca­te suc­ces­si­va­men­te. Il blocco di codice seguente mostra come creare gli array in C:

int numeri1[15];
// Come opzione è possibile indicare i valori memorizzati già in fase di creazione:
int numeri2[5] = {1, 2, 3, 4, 5};
c

In questo esempio il tipo dei dati da me­mo­riz­za­re è indicato prima del nome della variabile, come di consueto. Le parentesi quadre mostrano che questa variabile non rap­pre­sen­ta un valore singolo, ma un array. Il numero intero fra parentesi indica quanti elementi di questo tipo di dati possono essere me­mo­riz­za­ti nell’array. L’array numeri1 viene creato non ini­zia­liz­za­to nell’esempio qui sopra: in pratica, i valori non vengono scritti nei campi, che possono essere compilati con i valori in un secondo tempo all’interno del codice.

L’array numeri3, invece, viene ini­zia­liz­za­to ma­nual­men­te già in fase di creazione. Nella maggior parte dei casi questo approccio non è con­si­glia­bi­le, in quanto richiede molto tempo con gli array di maggiori di­men­sio­ni e il codice che ne risulta è spesso poco leggibile. Ti con­si­glia­mo invece di provare a compilare gli array a livello di pro­gram­ma­zio­ne, ad esempio con un ciclo for:

Int numeri3[100];
for(int i = 0; i < 100; i++) {
numeri3[i] = i + 1;
}
// Crea un array che contiene i numeri interi da 1 a 100.
c
N.B.

A seconda del sistema operativo con cui lavori, dello standard C che utilizzi e della posizione in cui hai di­chia­ra­to una variabile non ini­zia­liz­za­ta nel tuo programma, questa variabile può contenere un valore a caso. Lo stesso vale anche per i campi dell’array. Ti con­si­glia­mo quindi di non accedere ai campi che non hai ancora ini­zia­liz­za­to, so­prat­tut­to se il valore in essi me­mo­riz­za­to deve essere in­ter­pre­ta­to come puntatore.

Dopo aver creato un array, è possibile accedere ai singoli valori per mezzo dell’indice. Ricorda che gli array partono dall’indice 0. L’esempio seguente serve a chiarirne meglio il fun­zio­na­men­to:

int numeri2[5] = {1, 2, 3, 4, 5};
numeri2[3] = numeri2[2];
printf("%d\n", numeri2[3]);
// Output: 3
c

È possibile rea­liz­za­re un array 2D in C creando un array in cui ciascun campo contiene un altro array. Per sapere di preciso come fare, continua a leggere i prossimi paragrafi.

Array 2D in C: come si fa

Gli array 2D in C non sono altro che array mo­no­di­men­sio­na­li i cui campi con­ten­go­no un altro array. Puoi pensare a un array 2D come a una tabella o matrice di valori. Per creare e compilare gli array 2D si utilizza la sintassi seguente:

ints_two_dimensions[10][10];
ints_two_dimensions [0][1] = 0;
ints_two_dimensions [2][1] = 2;
ints_two_dimensions [9][4] = 36;
// e così via.
c

Qui il numero fra le parentesi quadre a sinistra rap­pre­sen­ta l’indice nel primo array al quale si deve accedere, mentre il numero a destra è l’indice nel secondo array. Questi due numeri possono essere visti come coor­di­na­te 2D o numero di riga e colonna. Così come gli array mo­no­di­men­sio­na­li, anche gli array bi­di­men­sio­na­li possono essere ini­zia­liz­za­ti con dei valori già in fase di creazione.

floats_two_dimensions[2][6] = {
{0.1, 3.56, 6.346, 8.9, 45.345, 2.284}
{7.0, 1.12, 9.74, 0.0, 3.56, 4.4}
}
c

Il principio di un array all’interno di un altro array non si limita a due di­men­sio­ni soltanto. Con questo metodo è possibile creare array con un numero di di­men­sio­ni a piacere.

int ints_four_dimensions[10][10][10][10];
c
Web Hosting
Diventa il n°1 della rete con il provider di hosting n°1 in Europa
  • Di­spo­ni­bi­li­tà garantita al 99,99%
  • Dominio, SSL ed e-mail inclusi
  • As­si­sten­za 24/7 in lingua italiana

Le ap­pli­ca­zio­ni degli array 2D in C

Ite­ra­zio­ne su un array 2D

L’ap­pli­ca­zio­ne più frequente degli array 2D in C (o degli array mul­ti­di­men­sio­na­li) è la creazione di strutture di dati mul­ti­di­men­sio­na­li. Nell’esempio seguente, un array bi­di­men­sio­na­le viene compilato con 0 e 1 alternati in modo da raf­fi­gu­ra­re una scac­chie­ra:

#include <stdio.h>
#define ARRAY_LENGTH 8
int main() {
    int scacchiera[8][8];
    for(int i = 0; i < ARRAY_LENGTH; i++) {
        for(int j = 0; j < ARRAY_LENGTH; j++) {
            scacchiera[i][j] = (i + j) % 2;
            printf("%d", scacchiera[i][j]);
        }
        printf("\n");
    }
    return 0;
}
/*
Output:
01010101
10101010
01010101
10101010
01010101
10101010
01010101
10101010
*/
c

Un array di stringhe

Un dettaglio molto im­por­tan­te per uti­liz­za­re cor­ret­ta­men­te gli array: un array è in effetti sem­pli­ce­men­te un puntatore verso una data posizione di memoria ed è con­si­de­ra­to in questo modo dal com­pi­la­to­re C. L’indice indicato in fase di scrittura o lettura di singoli campi rap­pre­sen­ta quindi lo spo­sta­men­to lungo l’array rispetto all’indirizzo di base. L’esempio seguente ne illustra il fun­zio­na­men­to:

int numeri2[5] = {1, 2, 3, 4, 5};
printf("%d\n", *numeri2);
// Output: 1
printf("%d\n", *(numeri2 + 2));
// Output: 3
c

Le stringhe sono trattate in C allo stesso modo. Pertanto, è possibile eseguire un’ite­ra­zio­ne su una stringa come se fosse un array. Questo sistema è visibile nell’esempio seguente, in cui tre record me­mo­riz­za­ti in un array vengono emessi in lettere maiuscole, carattere per carattere. Per accedere ai caratteri si utilizza il campo indice dell’array (parentesi quadre):

#include <stdio.h>
int main() {
    char* record[3];
    record[0] = "Ciao, questo è il primo record.\n";
    record[1] = "Questo è solo il secondo record.\n";
    record[2] = "E ora sono tre.\n";
    printf("Record originali:\n\n");
    for(int i = 0; i < 3; i++) {
        printf("%s", record[i]);
    }
    printf("\nRecord modificati:\n\n");
    for(int i = 0; i < 3; i++) {
        int j = 0;
        while(record[i][j] != '\n') {
            if(record[i][j] >= 'a' && record[i][j] <= 'z') {
                printf("%c", record[i][j] - 0x20);
            } else {
                printf("%c", record[i][j]);
            }
            j++;
        }
        printf("\n");
    }
}
/*
Output:
Record originali:
Ciao, questo è il primo record.
Questo è solo il secondo record.
E ora sono tre.
Record modificati:
CIAO, QUESTO È IL PRIMO RECORD.
QUESTO È SOLO IL SECONDO RECORD.
E ORA SONO TRE.
*/
c
Vai al menu prin­ci­pa­le