# Strutture in C Le strutture in C sono un tipo di dato che permette di raggruppare variabili che sono correlate tra di loro e che sono di diversi tipi. Sono utili per rappresentare oggetti reali o dati correlati. In questo caso come esempio useremo una struttura per rappresentare una persona, con i campi nome, cognome e età. ## Definizione di una struttura Per definire una struttura, si utilizza `struct` seguita dal nome della struttura e dentro si va a inserire "un blocco di codice" che contiene le dichiarazioni delle variabili. ```c struct Persona { char nome[10]; char cognome[10]; int eta; }; ``` ## Dichiarazione di una variabile di struttura Per dichiarare una variabile di struttura, si utilizza la parola chiave struct seguita dal nome della struttura e dal nome della variabile. ```c struct Persona p1; ``` - ### Accesso ai membri di una struttura Per accedere ai membri di una struttura, si utilizza l'operatore `.` seguito dal nome del membro. ```c p1.eta = 30; ``` ## Assegnazione di stringhe ai membri di una struttura Per assegnare una stringa a un membro di una struttura, non è possibile utilizzare l'operatore di assegnazione `=` direttamente. Questo perché i campi di stringa in una struttura sono rappresentati come array di caratteri, e in C non è possibile assegnare una stringa a un array di caratteri con `=`. Invece, si deve utilizzare la funzione `strcpy()` della libreria string.h. ```c #include struct Persona p1; strcpy(p1.nome, "Luca"); strcpy(p1.cognome, "Rossi"); ``` ## Stampa dei dati di una struttura Per stampare i dati di una struttura si possono usare 2 metodi: - Stampa i dati direttamente: ```c printf("Nome: %s\n", p1.nome); printf("Cognome: %s\n", p1.cognome); printf("Eta: %d\n", p1.eta); ``` Questo metodo è utile se si vuole stampare i dati di una struttura in un punto specifico del codice. Ma se dobbiamo andare a stampare tanti dati di una struttura, questo metodo può diventare ripetitivo e ingombrante. - Creare una funzione che stampa i dati di una struttura: ```c void StampaPersona(struct Persona p) { printf("Nome: %s\n", p.nome); printf("Cognome: %s\n", p.cognome); printf("Eta: %d\n", p.eta); } ``` Questo metodo è utile se si vuole stampare i dati di una struttura in più punti del codice. Inoltre, se si vuole stampare i dati di più strutture, si può passare la struttura come argomento alla funzione.