In questa lezione studieremo le strutture in C, cioè un insieme di variabili di uno o più tipi, raggruppate da un nome in comune. Fino a questo momento abbiamo studiato gli array, tramite i quali siamo riusciti a raggruppare dati dello stesso tipo, cioè omogenei.
Ma nel momento in cui dobbiamo gestire dati di tipo diverso, possiamo utilizzare le strutture in C. Queste strutture le chiameremo record.
Quindi un record, identificato da un nome, è un insieme di dati, non necessariamente omogenei, identificati dal tipo e dal nome, detti campi.
Il campo è un singolo componente di un record che a sua volta può essere strutturato.
Possiamo anche utilizzare un record come tipo elementare di un altro record, definendo strutture dati complesse che prendono nome di record di record.
O ancora è possibile utilizzare i record come elementi di un array, in questo caso parliamo di array di record o tabella, anche questa è una struttura dati complessa.
Sintassi delle strutture in C
Definiamo adesso la sintassi delle strutture. In linguaggio C il record viene definito dunque con questa sintassi:
struct <nome_struttura> {
<definizione_campi>
}
Facciamo subito degli esempi per capire bene i concetti.
struct alunno {
char cognome[30];
char nome[20];
int classe;
char sezione;
}
O ancora:
struct auto{
char marca[20];
char modello[20];
char targa[7];
unsigned cilindrata;
}
Innanzitutto è importante dire che all’interno della dichiarazione non è consentita alcuna inizializzazione dei campi. Non è inoltre consentito utilizzare per un campo un nome uguale a quello della struttura. Si possono utilizzare tipi semplici, tipi aggregati o anche tipi definiti dall’utente.
Dichiarare le variabili
Abbiamo visto negli esempi precedenti come definire un tipo di dato aggregato. Adesso, continuiamo a parlare delle strutture in C, e in particolar modo di come dichiarare le variabili.
Ad esempio per dichiarare due variabili di tipo alunno, riferendoci alla struttura precedente, potremmo scrivere:
struct alunno a1,a2;
In definitiva a1 e a2 sono delle istanze di alunno.
Se volessimo dichiarare invece due variabili di tipo auto potremmo scrivere ad esempio:
struct auto m1,m2;
Ma è possibile anche dichiararle in fase di dichiarazione del tipo di struct, ad esempio:
struct alunno {
char cognome[30];
char nome[20];
int classe;
char sezione;
}a1, a2;
La dichiarazione:
struct alunno a1={“Coding”,”Creativo”,2,”A”}
rappresenta una variabile a1 con i valori dei suoi campi inizializzati.
Accedere agli elementi delle strutture
Per riferci ad un campo di una struttura possiamo utilizzare questa sintassi:
<variabile_struct>.<campo>
Utilizzando il punto “.” cioè la notazione puntata.
Cioè, ad esempio: a1.classe
dove a1 è la variabile di tipo struct e classe è il campo.
Quindi per assegnare il valore ad una variabile posso scrivere:
unsigned x;
x=a1.classe;
Per inserire invece nella struct ad esempio il cognome potremmo utilizzare:
gets(a1.cognome);
Mentre per stampare potremmo scrivere:
printf(“cognome: %s”,a1.cognome);
Semplice esempio d’uso
Facciamo dunque un piccolo esempio d’uso delle strutture in C a scopo didattico.
Definiamo una struttura alunno e inseriamo il nome e il cognome. Dichiariamo due variabili a1 e a2. Dopo inseriamo i dati nella struttura e infine li visualizziamo.
#include <stdio.h>
struct alunno {
char cognome[30];
char nome[20];
}a1,a2;
int main(){
printf("inserisci il nome:");
gets(a1.nome);
printf("inserisci il nome:");
gets(a1.cognome);
printf("inserisci il nome:");
gets(a2.nome);
printf("inserisci il nome:");
gets(a2.cognome);
printf("nome: %s", a1.nome);
printf("\ncognome:%s", a1.cognome);
printf("\nnome:%s", a2.nome);
printf("\ncognome:%s", a2.cognome);
return 0;
}
Nella prossima lezione parleremo ancora delle strutture in C, in particolar modo dell’istruzione typedef e faremo anche degli esempi pratici.
Alcuni link utili
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna
Sommare dei numeri di una matrice
Ricerca elementi in una matrice