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> {
Apple 2021 iPad (10.2 Pollici, Wi-Fi + Cellular, 64GB) - Grigio Siderale (Ricondizionato)
379,00 € (a partire da 18 Marzo 2024 15:18 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)HP, Pc Desktop Pronto All'Uso, Computer Pc Fisso Intel i7, Ram 16Gb, SSD 512Gb, Pacchetto Libre Office, Windows 10 Pro (Ricondizionato)
159,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Lenovo, Mini Pc fisso i5, Ram 8 Gb, SSD 256 Gb, Wi Fi, Pc desktop i5, Computer pronto all'uso, Wi Fi, W10, Libre Office (Ricondizionato)
139,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)<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:
Lenovo, Thinkpad Pc portatile Intel Core i5-6Th, Ram 16 Gb, SSD 512 Gb, Pronto all'uso con Pacchetto Libre, Display HD da 14", W10 e Chiavetta USB Fingerprint (Ricondizionato)
299,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Generico Karmatech Hard Disk Esterno, Disco Rigido Esterno Portatile 2.5, USB 3.0, 500 GB, Nero (500 GB) (Ricondizionato)
20,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)(Ricondizionato) TP-Link TL-WA850RE Ripetitore WiFi Extender e Access Point, Velocità 300Mbps, Porta LAN, potenzia la copertura Wi-Fi
16,99 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)<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