Completiamo oggi l'elenco dei tipi di dati fondamentali del C con
il tipo char, che permette di memorizzare caratteri.
Per indicare una costante carattere si utilizza il singolo apice,
ad es:
char sesso, scelta;
...
sesso = 'm';
scelta = 'y';
L'insieme dei valori assunti da una variabile di tipo char
è costituito da lettere dell'alfabeto, cifre numeriche e segni di
interpunzione e dipende essenzialmente dalla codifica adottata dalla
macchina (v. lezione 29).
E' importante sottolineare che l'uso di valori numerici interi per
la codifica dei caratteri rende le variabili int e char
interscambiabili in numerose occasioni ed è una prassi diffusa tra
i programmatori, anche se spesso abusata.
Chi sostiene la necessità "morale" di scrivere codice
elegante e leggibile può non approvare l'utilizzo di questo stratagemma,
tuttavia è bene notare che risulta essere molto utile in varie circostanze,
ad es. per gli algoritmi di ordinamento delle stringhe.
A proposito di stringhe, avrete notato l'assenza di un tipo specifico
per esse: infatti il C standard tratta le stringhe per mezzo di
array di caratteri.
Un array è un vettore di elementi di un dato tipo (che
deve essere lo stesso per tutti), ognuno dei quali è indirizzabile
per mezzo della sua posizione all'interno dell'array.
Per dichiarare un array in C si utilizza una particolare notazione
in cui il nome dell'array è seguito dalle parentesi quadre.
Ad es.
char nome[6];
definisce un array di 6 caratteri, indicato con nome.
Notiamo che anteposto al nome dell'array è il tipo degli elementi
che esso deve contenere e che all'interno delle parentesi quadre
[ ] è indicato il numero di elementi all'interno dell'array.
Una volta dichiarato l'array, è possibile riferirsi ad un suo elemento
specificandone la posizione attraverso un indice all'interno di
parentesi quadre, ad es.
nome[1] = 'n';
assegna all'elemento in posizione 1 dell'array il valore 'n'.
Attenzione: è bene ricordare sempre che la numerazione
degli elementi di un array parte da 0 fino alla dimensione dell'array-1.
Quindi nome[0] è il primo carattere, nome[1] il secondo
e così via fino a nome[5] che è il sesto ed ultimo carattere
nell'array.
L'elemento nome[6] non esiste e accedere a tale elemento
provoca, in fase di esecuzione, un errore di accesso in memoria
e tipicamente la terminazione con errore del nostro programma.
Approfondiremo in seguito il discorso sugli array e per il momento
vedremo quello che ci interessa per poter lavorare con le stringhe.
Una stringa è un array di caratteri terminanti con un carattere
null (indicato con '\0'), detto carattere terminatore.
Una stringa costante in C viene indicata racchiudendo tra doppi
apici i caratteri che la compongono (escluso il carattere terminatore).
Ad es.:
" Questa e' una stringa
"
è una stringa, o meglio un array di 22 caratteri (incluso '\0' che
il C inserisce automaticamente).
Si noti che '\0' è diverso dallo '0' ASCII, in quanto diverse sono
le loro rappresentazioni binarie, 00000000 per il primo e 00110000
per il secondo.
Inoltre 'Q' e "Q" hanno un significato diverso: la prima
rappresenta il carattere Q, la seconda la stringa formata dai due
caratteri 'Q' e '\0'.
Particolare importanza ha la stringa nulla, rappresentata
con due doppi apici consecutivi "", che contiene il solo
carattere terminatore.
A questo punto ci si potrebbe chiedere come inserire in una stringa
dei caratteri speciali, come il carattere di tabulazione, il backspace
e il ritorno a capo.
Il C permette di esprimere questi ed altri caratteri speciali in
modi differenti, ma per alcuni di essi esistono delle sequenze
di escape, costituite dalla barra rovesciata (o backslash)
seguita da una lettera.
Il linguaggio C definisce le seguenti sequenze di escape:
|
\a |
alarm (allarme) |
|
\b |
backspace |
|
\f |
form feed (salto pagina) |
|
\n |
new line (a capo) |
|
\r |
return (ritorno carrello) |
|
\t |
tab orizzontale |
|
\v |
tab verticale |
|
\? |
punto interrogativo |
|
\' |
apice singolo |
|
\" |
apice doppio |
|
\\ |
backslash |
Si noti che il carattere \ è utilizzato per specificare
al compilatore che la lettera che lo segue deve essere interpretata
con un significato speciale; per questo motivo, quando la si vuole
includere in una stringa come carattere, occorre utilizzare la sequenza
di escape corrispondente.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet