12: Typedef, enum, struct (Definizione di nuovi tipi)
Nella guida precedente abbiamo definito i principali tipi predefiniti del linguaggio C e abbiamo accennato al fatto che potessero esserne definiti dei nuovi dall’utente, attraverso l’uso della typedef. Oggi approfondiamo meglio questo argomento.
-
Tipi semplici User-defined
Il nuovo tipo può essere ridefinito dando un altro nome a un tipo preesistente attraverso la parola chiave typedef. La sintassi sarà la seguente: typedef TipoEsistente NuovoTipo;
Per esempio:
typedef int num; //creo un nuovo tipo di nome 'num', che è un numero intero typedef char Nuovocarattere; typedef num Nuovonum; //creo un tipo nuovo da un altro tipo definito da me
-
Elencazione esplicita dei valori
Posso definire un nuovo tipo elencando all’interno delle parentesi { } tutti i suoi valori, ma annoverandoli sotto un unico identificativo. In questo caso usiamo l’espressione typedef enum. La sintassi sarà: typedef enum {elemento1, elemento2,…, elementoN} NuovoTipo;
Per esempio:
typedef enum {invidia, accidia, avarizia, lussuria, superbia, gola, ira} ViziCapitali; ViziCapitali primo, secodo; //dichiaro due variabili del nuovo tipo primo=ira; //assegno alla variabile il valore ira
I tipi enumerati ammettono tutte le operazioni applicabili agli interi (aritmetiche, di confronto, di assegnamento, etc.), quindi si comportano a tutti gli effetti come il tipo integer .
-
Tipi strutturati user-defined (array, struct)
Così come è possibile definire un nuovo tipo semplice, la stessa cosa si può fare con un tipo strutturato, come un array. Per esempio:
typedef int Vett[10]; // creo un nuovo tipo di nome "Vett di 10 elementi di tipo int" Vett lista; //dichiaro una variabile di tipo Vett
Ora, mentre un array contiene al suo interno elementi omogenei (tutti dello stesso tipo), il C fornisce un costruttore che permette di aggregare informazioni e elementi eterogenei (di tipi differenti): la struct, che letteralmente significa struttura. Questi elementi, invece, vengono definiti campi.
Vediamo ora un esempio di dichiarazione di un tipo struct:
typedef struct { int Anno; char Nome [20]; char Corso; } Studente; Studente St1, St2; //dichiarazione di variabili di tipo Studente
Quindi la sintassi è : la parola chiave typedef struct, le parentesi { } all’interno delle quali metteremo i vari campi, composti a loro volta da tipo e identificatore (nel nostro caso, abbiamo una variabile di tipo int chiamata Anno, una di tipo Char chiamata Corso e un array di caratteri, chiamato Nome), l’identificativo del nuovo tipo struct (nel nostro esempio, Studente) e il terminatore ;.
Oppure per dichiarare in maniera abbreviata nuove variabili di tipo struct, posso omettere la typedef e indicare direttamente i nomi delle variabili, al posto dell’identificativo. Per esempio, facendo riferimento a quello precedente:
struct { int Anno; char Nome [20]; char Corso; } St1,St2; //ho dichiarato direttamente le variabili che hanno come tipo //la suddetta struct
Ora, per poter accedere ai vari campi della struttura e poterli inizializzare, si scrive l’identificatore della struttura, seguito da un punto (dot) e dall’identificatore del campo a cui si vuole accedere. Per esempio, se volessi dichiarare che lo studente St1, fa il terzo anno, si chiama “Puffetta” e fa il corso “B”, scriverò:
St1.Anno=3; St1.Nome= 'Puffetta'; St1.Corso= 'B';
Per il resto, valgono le stesse proprietà dei tipi semplici.
La guida è terminata. Se avete domande, o non è chiaro qualcosa, scrivetecelo in un commento. Nel prossimo articolo vedremo i puntatori. Non perdetelo!
Commenti recenti