* * ARRAY DI STRUTTURE. * Per definire un array di strutture e' necessario definire una struttura * e poi dichiarare una array di quel tipo. Ad es: * * struct indirizzo { ; Definiamo una struttura "indirizzo" * char nome[30]; * char via[60]; * char citta[20]; * }; ; Senza crearne fisicamente ancora nessuna. * * struct indirizzo moltindiriz[100]; * * Come si vede, con l'ultima istruzione abbiamo creato un array di 100 * strutture di tipo "indirizzo", il cui nome e' moltindirizz, utilizzabile * come un'agenda contenente max 100 indirizzi. * A questo punto, per accedere ad un certo elemento di un certo indirizzo * all'interno dell'agenda, si puo' fare cosi': * * printf("%s", moltindirizzi[3].nome); * Stampa il nome * printf("%s", moltindirizzi[8].citta); * Stampa la citta' * * Queste due istruzioni stampano rispettivamente il nome del quarto * indirizzo e la citta' del nono (gli array partono da 0). * Ora alcune note: * 1) Se due variabili struttura sono del medesimo tipo, e' possibile * assegnare l'una all'altra (ossia copiare l'una nell'altra). Es: * * struttura1 = struttura2; ; essendo dello stesso tipo le copio! * moltindirizzi[3] = moltindirizzi[8]; ; Idem. * * 2) Gli elementi di una struttura possono essere di qualsiasi tipo di * dati valido in C, inclusi array e strutture. Quindi e' possibile * creare anche delle STRUTTURE NIDIFICATE, ossia delle strutture * all'interno di altre strutture. Vediamo un esempio: * * struct berlusconi { * struct indirizzo dovestai; * int soldiposseduti; * int retipossedute; * int votipresi; * char ultimodiscorso[300]; * }; * * In questo caso notiamo che la struttura contiene un'altra struttura * tra i suoi elementi. Per accedere a elementi come interi, float o array * basta usare la solita sintassi col punto: * * berlusconi.ultimodiscorso = "Mi consenta"; * * Per accedere agli elementi nidificati della struttura indirizzo, invece: * * berlusconi.dovestai.citta = "Milano"; * * Ossia, ci si riferisce agli elementi di ciascuna struttura a partire * da sinistra verso destra e dall'esterno all'interno ricordandosi di * separare con l'operatore "." punto. * * Vediamo di mettere in pratica le ultime cose dette: */ #include <stdio.h> /* Includiamo la libreria standard */ struct indirizzo { /* Definiamo una struttura "indirizzo" */ char nome[30]; char via[60]; char citta[20]; }; /* Senza crearne fisicamente ancora nessuna */ struct dativari { struct indirizzo dovestai; char frasefamosa[60]; }; /* Funzione principale e inizio del programma */ int main(void) /* Funzione principale, eseguita per prima */ { /* Inizio della funzione main() */ int i; struct dativari moltindirizz[4]; /* Array di 4 strutture dativari */ for(i=0; i<3; i++) { /* Con il for richiedo 3 indirizzi da riempire */ printf("\nIndirizzo n.%d:",i); printf("\nScrivi il tuo nome: "); gets(moltindirizz[i].dovestai.nome); /* strutt. nidificata! */ printf("Scrivi la via: "); gets(moltindirizz[i].dovestai.via); /* idem */ printf("Citta': "); gets(moltindirizz[i].dovestai.citta); /* idem */ printf("Una frase famosa: "); gets(moltindirizz[i].frasefamosa); /* array non nidificato */ } /* Il quarto indirizzo lo ottengo copiandoci il primo: */ moltindirizz[3] = moltindirizz[0]; /* Copia di strutture! */ /* Stampiamo qualche dato qua' e la' per verifica: */ printf("\n\nNome primo indirizzo: %s", moltindirizz[0].dovestai.nome); printf("\nVia secondi indirizzo: %s", moltindirizz[1].dovestai.via); printf("\nCitta' terzo indirizzo: %s", moltindirizz[2].dovestai.citta); printf("\nFrase famosa primo indirizzo: %s", moltindirizz[0].frasefamosa); return(0); /* la funzione main restituisce uno 0 intero */ } /* Fine della funzione main() */ /* Per programmi che devono gestire molti dati questo sistema a strutture * puo' essere molto vantaggioso, sia per la leggibilita' del listato che * per l'economia generale. */