*
* 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.
*/
