Esiste una forte relazione tra l'uso degli array e di cicli For, per il fatto che un ciclo permette di contare per un certo numero di volte. In questo modo utilizzando una variabile che incrementi (o decrementi) il suo valore ad ogni ciclo, si possono scorrere le posizioni dell'array in maniera semplice, con un notevole risparmio di codice scritto.
Per fare un esempio, assumiamo di avere un array di int di 100 elementi e di voler stampare a video il contenuto di tutte le posizioni dell'array; vista la particolare natura dell'array non inizieremo a contare da 1, ma da 0, fino ad arrivare a novantanove (quindi cento elementi effettivi). Utilizzeremo il comando di stampa sull'array con l'indice, incrementato ogni volta, preso dal ciclo for.
In codice:
int int_array[100];
int i;
for (i=0; i<100; i++)
{
printf ("%d", int_array[i]);
}
In questo caso la variabile di controllo "i" del ciclo for viene usata come indice per l'array; da far notare che, a livello visivo, si capisce subito che si cicla di cento elementi, perché la condizione posta è quella di avere "i<100", iniziando a contare da zero, quindi, si esegue il ciclo fino al novantanovesimo elemento, che è minore di cento; alla successiva iterazione, prima di eseguire il corpo del ciclo, "i" viene incrementata di uno e quindi vale cento, valore che non verifica più la condizione (100 non è minore di 100, semmai è uguale) e che fa terminare il ciclo for; l'intervallo contato (da 0 a 99) è utile per rappresentare tutti e cento gli elementi dell'array, visto che, come spiegato prima, in un array si contano gli elementi partendo dallo zero.
In questo modo potrebbe essere abbastanza semplice anche inizializzare tutti i valori dell'array; supponiamo di voler dare ad ogni elemento dell'array il valore uguale alla sua posizione, con la seguente soluzione si risparmia un sacco di codice:
int int_array[100];
int i;
for (i=0; i<100; i++)
{
int_array[i] = i;
}
Naturalmente un array può essere inizializzato anche passando direttamente i valori, ad esempio, come in questo esempio:
int numeri[] { 7, 23, 4, 94, 120 };
in cui si crea un array di 5 elementi, ed è per questo che tra parentesi quadre non si mette la dimensione, in quanto ricavata dal numero di elementi compresi tra le parentesi graffe.
Prendiamo come altro esempio gli array di caratteri, che hanno una particolarità, possono essere inizializzati, senza essere divisi da virgole; ora proponiamo due forme equivalenti di inizializzazione, di cui la prima sicuramente più pratica:
char caratteri[] = "Hello World!";
char caratteri[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!' };
Una particolarià cha riguarda il linguaggio C, è che non esiste un vero e proprio "tipo stringa", quello che in altri linguaggi viene chiamato "String" (si pensi al C++ o al Java). In C le stringhe vengono rappresentate tramite array di caratteri, quindi bisogna stare attenti alle operazioni che vi si compiono e ricordarsi che hanno comunque il vantaggio di godere di tutti pregi degli array, tra cui quello di poter scorrere a piacimento nella posizione della stringa stessa. Ogni array di caratteri termina con la sequenza di escape "\0" per far capire che la stringa è terminata.
Le funzioni che possono manipolare il tipo stringa possono essere utilizzate solo se si include il file string.h; a questo punto ci sono delle precisazioni da fare nell'utlizzo delle stringhe: innanzitutto una stringa viene inizializzata mettendo la frase racchiusa tra doppi apici e non tra un apice singolo,
char stringa[] = "Hello World!";
Con il printf (ed in maniera analoga con scanf), per stampare una stringa si usa il codice %s, come mostrato nell'esempio:
#include <string.h>
#include <stdio.h>
int main()
{
char stringa[] = "Hello World!";
printf("%s \n", stringa);
}
Per sapere la lunghezza di una stringa, si usa la funzione strlen che conta, appunto, il numero di caratteri:
strlen(stringa);
mentre per copiare una stringa in un'altra si usa la funzione strcpy che ha la seguente sintassi:
strcpy(stringa_destinataria, stringa_sorgente);
Se si ricerca un carattere all'interno di una stringa, bisogna usare la strchr, come indicato di seguito;
strchr(stringa, carattere_da_cercare);
La funzione che unisce (concatena) due stringhe è la strcat illustrata qui sotto,
strcat(stringa_uno, stringa_due);
Mentre l'ultima funzione, ed anche la più importante, è la strcmp che serve per confrontare la lunghezza di due stringhe.
La funzione restituisce 1 se la prima stringa è più lunga della seconda, 0 se sono lunghe uguali e -1 se la seconda è più lunga della prima.
Adesso che abbiamo visto cosa è un array, come lo si crea e come lo si inizializza, come si accede agli elementi dell'array stesso, possiamo affermare che abbiamo posto le basi per la conoscenza di uno strumento potente ed utile (permette di risparmiare decine di righe di codice) per il programmatore.