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 STRUTTURAPossiamo 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! |
