10: Array (inizializzazione)

Continuiamo la nostra trattazione sugli array in C: nello scorso articolo abbiamo visto come dichiararli (per il momento sempre come variabili globali), ora vediamo come inserire dei valori di partenza al loro interno e come manipolarli attraverso qualche esempio.

Per inizializzare un Array (per esempio di numeri interi) possiamo procedere nel modo seguente, analogamente a quanto fatto per le variabili semplici:

int vettore[]={1,2,3,4,5,6,7,8,9,10};
char vettore2[]={a,b,c,d,e,\0};
//oppure
char vettore2[]="abcde";

In questo modo possiamo accorpare la parte di dichiarazione e inizializzazione in una sola istruzione. I valori che vogliamo inserire vanno messi tra parentesi graffe separandoli con delle virgole. Non è necessario specificare in questo modo la lunghezza del vettore che verrà determinata dal calcolatore in base al numero di elementi che ci inseriamo dentro. Nel caso di stringhe dobbiamo ricordarci di inserire anche il simbolo \0 come ultimo carattere speciale, altrimenti possiamo ricorrere un’istruzione del tipo
char vettore2[]=”abcde” in cui il carattere speciale verrà inserito automaticamente in coda al vettore.
Altrimenti se necessitiamo di operare su un singolo elemento del nostro vettore modificandone il valore possiamo farlo all’interno della funzione main in questo modo:

int vettore[10];

int main() {
vettore[0]=14;
vettore[3]=27;

}

Il numero che compare tra parentesi quadre in questo secondo codice come già visto prende il nome di indice dell’array, ed è un intero che indica la posizione del valore da modificare nell’array: per esempio l’istruzione vettore[0]=14; assegna all’intero contenuto nella prima cella (di indice 0) dell’array il valore 14. Allo stesso modo nella quarta cella viene inserito il valore 27.

Per quanto riguarda le matrici operiamo essenzialmente allo stesso modo, con l’unico accorgimento che queste ultime avranno 2 indici invece che 1, e il primo indica il numero della riga e il secondo il numero della colonna della matrice stessa (attenzione, gli indici partono sempre da 0!). Quindi otterremo le seguenti istruzioni:

int matrice[2][2]={1,2,3,4};
//oppure
int matrice[2][2]={{1,2}{3,4}};

int main() {
matrice[0][0]=7;
matrice[1][1]=12;
// ecc..

}

Separando i valori da inserire con delle virgole il calcolatore provvederà a riempire per prima la prima riga per intero, per poi passare alla seconda e così via, quindi in questo caso avremo una matrice 2×2 in cui la prima riga contiene i valori 1 e 2 e la seconda riga i valori 3 e 4. Un modo analogo che forse può’ risultare più intuitivo a scapito di inserire delle parentesi graffe in più’ (secondo esempio) permette di suddividere in gruppi i valori appartenenti a ciascuna riga.
All’interno della funzione main abbiamo due assegnamenti: assegno all’intero che occupa la posizione 0x0 (prima riga e prima colonna) il valore 7, all’intero che occupa la seconda riga e seconda colonna il valore 12.

Ora una piccola osservazione: il C è un linguaggio fornito di una sintassi molto rigorosa, e uno dei problemi principali in cui si rischia di incorrere lavorando con gli array è il cosiddetto “overflow” ovvero si rischia di “sfondare” i nostri array. Per esempio se provassimo ad inserire in un array un numero di valori maggiore della dimensione dell’array stesso (che è fissata all’inizio del programma, e non può essere modificata in seguito) indurremmo il calcolatore lavorare su delle aree di memoria che non sono state riservate al nostro programma e potremmo addirittura non accorgercene nemmeno quando lanciamo il programma! In altre parole il C non ha controllo sulle dimensioni degli array, e spetta a noi assicurarci che ogni array che dichiariamo abbia una dimensione adeguata agli elementi che inseriremo al suo interno. Più avanti si capirà che l’overflow è un problema più subdolo di quanto possa sembrare a primo avviso.

Anche per oggi è tutto, nel prossimo articolo vedremo come lavorare con gli array per mezzo dei cicli di scansione. Alla prossima!

Please follow and like us: