Array 2D in C
Con gli array in C puoi salvare un record di dati correlati fra loro senza dover creare più variabili. Di norma gli array sono monodimensionali, ma è possibile espanderli fino a un numero di dimensioni a piacere. In questo articolo ti mostriamo come creare e utilizzare gli array 2D in C in modo efficace.
Le nozioni di base degli array in C
Per creare e padroneggiare gli array 2D in C in modo efficace, devi conoscere innanzitutto alcuni aspetti fondamentali degli array nel linguaggio di programmazione C. Come in molti altri linguaggi, gli array sono un blocco di memoria in cui è possibile memorizzare più valori dello stesso tipo di dati. In questo modo è possibile memorizzare e riunire più valori in un unico nome di variabile. Le dimensioni dell’array devono essere note in fase di compilazione e non possono essere modificate successivamente. 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};
cIn questo esempio il tipo dei dati da memorizzare è indicato prima del nome della variabile, come di consueto. Le parentesi quadre mostrano che questa variabile non rappresenta un valore singolo, ma un array. Il numero intero fra parentesi indica quanti elementi di questo tipo di dati possono essere memorizzati nell’array. L’array numeri1
viene creato non inizializzato 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 inizializzato manualmente già in fase di creazione. Nella maggior parte dei casi questo approccio non è consigliabile, in quanto richiede molto tempo con gli array di maggiori dimensioni e il codice che ne risulta è spesso poco leggibile. Ti consigliamo invece di provare a compilare gli array a livello di programmazione, 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.
cA seconda del sistema operativo con cui lavori, dello standard C che utilizzi e della posizione in cui hai dichiarato una variabile non inizializzata nel tuo programma, questa variabile può contenere un valore a caso. Lo stesso vale anche per i campi dell’array. Ti consigliamo quindi di non accedere ai campi che non hai ancora inizializzato, soprattutto se il valore in essi memorizzato deve essere interpretato 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 funzionamento:
int numeri2[5] = {1, 2, 3, 4, 5};
numeri2[3] = numeri2[2];
printf("%d\n", numeri2[3]);
// Output: 3
cÈ possibile realizzare 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 monodimensionali i cui campi contengono 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.
cQui il numero fra le parentesi quadre a sinistra rappresenta 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 coordinate 2D o numero di riga e colonna. Così come gli array monodimensionali, anche gli array bidimensionali possono essere inizializzati 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}
}
cIl principio di un array all’interno di un altro array non si limita a due dimensioni soltanto. Con questo metodo è possibile creare array con un numero di dimensioni a piacere.
int ints_four_dimensions[10][10][10][10];
c- Certificato SSL e protezione DDoS
- Velocità, flessibilità e scalabilità
- Dominio e consulente personale
- 1 anno gratis del gestionale di fatturazione elettronica FlexTax
Le applicazioni degli array 2D in C
Iterazione su un array 2D
L’applicazione più frequente degli array 2D in C (o degli array multidimensionali) è la creazione di strutture di dati multidimensionali. Nell’esempio seguente, un array bidimensionale viene compilato con 0 e 1 alternati in modo da raffigurare una scacchiera:
#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
*/
cUn array di stringhe
Un dettaglio molto importante per utilizzare correttamente gli array: un array è in effetti semplicemente un puntatore verso una data posizione di memoria ed è considerato in questo modo dal compilatore C. L’indice indicato in fase di scrittura o lettura di singoli campi rappresenta quindi lo spostamento lungo l’array rispetto all’indirizzo di base. L’esempio seguente ne illustra il funzionamento:
int numeri2[5] = {1, 2, 3, 4, 5};
printf("%d\n", *numeri2);
// Output: 1
printf("%d\n", *(numeri2 + 2));
// Output: 3
cLe stringhe sono trattate in C allo stesso modo. Pertanto, è possibile eseguire un’iterazione su una stringa come se fosse un array. Questo sistema è visibile nell’esempio seguente, in cui tre record memorizzati 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