Sei sulla pagina 1di 13

Laboratorio di Programmazione 1

Docente: dr. Damiano Macedonio Lezione 15 10/03/2014

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

struct date { int day; int month; campi int year; };


$ichiara ione di una variabile

struct date today;


3

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;

Le Strutture: 'lloca ione di (emoria


La dichiarazione di una struttura comunica al compilatore come )atta la struttura. La dichiarazione di una variabile di tipo struttura alloca in memoria lo spa io necessario a memori are i campi della struttura.

.day today .month .year

*+ , -+*.
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

Le Strutture: 'rgomenti di 0un ioni

Le strutture possono essere utili argomenti di )un ioni:


int

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.

Le Strutture: 'rgomenti di 0un ioni


&oid chan*e)ate(struct date d) { d.day = 24; d.month = +; } int main(&oid) { struct date d; d.day = 10; d.month = 3; d.year = 2014; chan*e)ate(d); printf()ata di o**i, -i.-2i.-i#/ d.day/ d.month/ d.year) } 4utput $ata di oggi: *+3+,3-+*.

Le Strutture: /alore di 5itorno di 0un ioni

Le strutture possono essere utili valori di ritorno di )un ioni.

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: !ni iali a ione

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

struct date d = {10, 3, 2014}

! valori ini iali indicati tra le parentesi gra"e devono essere espressioni costanti.

11

Le Strutture: !ni iali

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

Le Strutture: 'ssegnamento Composto

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

Potrebbero piacerti anche