Corso di C con Linux

I tipi di dati fondamentali - Parte II

 

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