Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Le Strutture
La struttura un costrutto del linguaggio C che permette di raggruppare elementi di diverso tipo in ununica entit logica.
Gli
array sono uno strumento analogo, ma permettono di raggruppare solo elementi dello stesso tipo.
Le strutture definiscono un nuovo tipo di dati: si possono dichiarare variabili di tipo struct nome_struttura. La defini ione di una struttura:
!ni
ia con la parola chiave struct, seguita dal nome della struttura e da una lista di campi tra parentesi gra"e. Ciascun campo viene specificato tramite un tipo ed un nome. ! campi sono separati da un punto e virgola.
Le Strutture: #sempio
nome della struttura
Le Strutture
%er accedere ad un campo di una struttura, occorre specificare il nome della variabile, seguito da un punto e dal nome del campo.
struct date today; today.day = 10; imposta ione valore today.month = 3; today.year = 2014; if (today.day == 1 && today.month == 1) printf( uon anno!"n#); lettura valore
! campi di una struttura possono essere usati nelle espressioni come una &ualsiasi altra variabile semplice.
tomorro$.day = today.day % 1;
*+ , -+*.
5
Le Strutture: /isibilit
Le strutture definite prima e allesterno di &ualsiasi )un ione sono dette globali.
La
defini ione di una struttura globale permette a tutte le variabili che sono definite nel programma di essere dichiarate con il tipo della struttura.
Le strutture definite allinterno di una particolare )un ione sono dette locali.
Le
strutture locali sono visibili e posso essere utili ate solo allinterno della )un ione che le dichiara.
Le Strutture: /isibilit
struct date { //struttura globale int day; int month; int year; int function(&oid) { } struct time { //struttura locale int hour; int minutes; int main(&oid) { } struct date today; ... } } struct date tomorro$; struct time no$;
7
ate come
num'er(f)ays(struct date d); La )un ione num'er(f)ays restituisce un valore intero e riceve come unico argomento una variabile di tipo struct date.
1ualsiasi modifica apportata dalla )un ione ai valori contenuti in un campo della struttura non ha e"etto sulla struttura originale. 2ali modifiche hanno e"etto solo sulla copia della
struttura che viene creata alla chiamata di )un ione.
1uando
passate come argomento di una )un ione le strutture si comporatano come variabili ordinarie3semplici e non come array.
ate come
struct date chan*e)ate(struct date d) { struct date resu0t; resu0t.day = d.day % 1; resu0t.month = d.month % 1; resu0t.year = d.year % 2; return resu0t; } struct d1 = ....; struct d2 = chan*e)ate(d1);
10
Le strutture possono essere ini iali ate in modo simile agli array: gli elementi vengono elencati tra parentesi gra"e e separati da una virgola.
struct date d; d.day = 10; d.month = 3; d.year = 2014
! valori ini iali indicati tra le parentesi gra"e devono essere espressioni costanti.
11
a ione
1uando si utili a lini iali a ione tramite parentesi gra"e, possibile specificare meno valori di &uelli contenuti nelle struttura 6come per gli array78.
struct
date d = {10/ 3}; !n &uesto caso d.day = 10, d.month = 3, mentre d.year non viene ini iali ato.
9 possibile anche specificare i nomi dei campi nella lista di ini iali a ione, usando la nota ione .nome1campo = &a0ore
struct
date d = {.month = 3/ .year = 2014}; !n &uesto modo possibile ini iali are i campi in &ualsiasi ordine o ini iali are campi specifici.
12
La nota ione con parentesi gra"e pu: essere utili ata non solo per lini iali a ione di una struttura, ma anche per assegnare 6successivamente8 uno o pi; valori ad una struttura usando ununica istru ione. struct date today; ... today = (struct date) {10/ 3/ 2014};
{10/ 3/ 2014} detto letterale composto. Loperatore di cast (struct date) necessario per indicare al compilatore il tipo dellespressione. 9 possibile usare anche la nota ione .campo.
13