Ed eccoci qui ad un’importantissima lezione sul C. In questa lezione introdurremo ed analizzeremo un tipo fondamentale ed imprescindibile del C, il tipo struct, o per essere più precisi, il tipo record.
Le variabili struttura (record o struct) sono abbastanza differenti da quelle di un vettore. Gli elementi di una struttura (i suoi membri, tecnicamente parlando) non devono essere dello stesso tipo. Inoltre è possibile dare dei nomi ai membri di una struttura. Infatti potremo, in seguito, anche accedere ai membri di una struttura, usando il suo nome, la sua posizione e gli opportuni operatori che il C ci fornisce.
Quando ad esempio, vogliamo memorizzare una serie di dati connessi logicamente ma che sono di tipo differente, la struct è quello che fa per noi: Ad esempio se volessimo registrare delle informazioni riguardanti un libro: autore, tipologia, prezzo, data di pubblicazione, potremmo dichiarare una struttura di questo tipo:
struct {char autore[NAME+1]; char tipologia[NAME+1]; int prezzo; char data di pubblicazione[NAME+1];} libreria;
Fra parentesi ho scritto NAME+1 perchè dobbiamo inserire il size di quell’array + 1 per il terminatore di stringa. La notazione struct quindi specifica un tipo, mentre con “libreria” una variabile di quel tipo.
I campi di una struttura vengono memorizzati nell’ordine in cui sono dichiarati, e puntano tutti ad aree di memoria differenti. Ciò è importante perchè esiste un altro tipo di variabile struttura nel C, chiamata UNION, che è identica alla struct, soltanto che le variabili puntano tutte alla stessa area di memoria e quindi anche essendo identica, non può essere usata per gli scopi, per i quali viene usata una struct.
Esattamente come un vettore, anche una struct può essere inizializzata, ad esempio, riprendendo la struct di prima:
struct {char autore[NAME+1]; char tipologia[NAME+1]; int prezzo; char data di pubblicazione[NAME+1];} libreria={“Isaac Asimov”, “Fantascienza”, 20, “22/11/98”};
Ricordate che i valori d’inizializzazione devono essere immessi nello stesso ordine in cui sono dichiarati i campi della struct.
E se ora volessimo accedere ai campi di una struttura? Mi spiego meglio, se volessimo stampare a schermo il nome dell’autore? Il C fornisce l’operatore “.” che permette di accedere ai campi di una struttura:
printf(“Il nome dell’autore e’: %s\n”, libreria.autore);
Dunque dobbiamo prima scrivere il nome della struttura, l’operatore “.” per accedere e poi il campo al quale vogliamo accedere.
DEFINIRE UN TIPO STRUTTURA
Possiamo usare l’istruzione typedef per definire un vero nome di tipo. Esempio (riprendiamo la struct precedente):
typedef struct {char autore[NAME+1]; char tipologia[NAME+1]; int prezzo; char data di pubblicazione[NAME+1];} Libreria;
Fatto ciò possiamo usare il tipo Libreria, come qualsiasi tipo nativo del C, come int, char, short ecc…
Ad esempio se volessimo definire un vettore di tipo struct, potremo scrivere: Libreria vettore[10]. In questo modo abbiamo definito un vettore dello stesso tipo della struct. Se non avessimo usato il typedef avremmo dovuto scrivere:
struct libreria vettore[10]
Anche per le strutture è tutto! Vi aspetto alla prossima ragazzi!
|