• Non ci sono risultati.

Fondamenti di Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "Fondamenti di Informatica"

Copied!
3
0
0

Testo completo

(1)

Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2)

1

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 1

FONDAMENTI DI INFORMATICA

Prof . PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Facoltà di Ingegneria Università degli Studi di Udine

Linguaggio C Struct e union

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 2 Questo insieme d i trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali . Il titolo ed i copyright relativi alle slides (ivi inclusi , ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono d i proprietà degli autori prof . Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro . In tal caso non è richiesta alcuna autorizzazione .

Ogni altro utilizzo o riproduzione (ivi incluse , ma non limitatamente, le riproduzioni su supporti magnetici, su reti d i calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.

L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione . Essa è fornita per scopi meramente didattici e non per essere utilizzata i n progetti d i impianti , prodotti , reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto d i queste slide (ivi incluse, ma non limitatamente , la correttezza , completezza , applicabilità, aggiornamento dell’informazione ).

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce a d ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.

Nota di Copyright

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 3

Strutture

Le strutture sono collezioni di una o più variabili, di uno o più tipi.

Esempio:

impiegato

char nome[32]

char cognome[64]

int cod _qualifica int cod _ufficio

residenza

char via[32]

int numero char cap[6]

char citta[32]

residenza

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 4

Sintassi

struct punto {

int x;

int y;

};

struct punto p1, p2;

parola chiave

nome della struttura

variabili di tipo struct punto campi,

o membri, della struttura

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 5

Sintassi

• Una dichiarazione struct definisce un tipo

• Una dichiarazione di struttura che non sia seguita da una lista di variabili non riserva alcuna area di memoria!

dichiarazione

definizione struct punto

{ int x;

int y;

};

struct punto p1;

struct punto {

int x;

int y;

} p1;

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 6

Sintassi

• In un’espressione, un campo di una particolare struttura è individuato dal costrutto

nome_struttura.campo

• Ad esempio la sintassi:

a.x individua la coordinata x del punto a.

• Assegnamento di un campo: a sia l’origine del riferimento cartesiano

a.x = 0;

a.y = 0;

(2)

Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2)

2

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 7

Uso delle strutture

struct punto { int x;

int y;

};

struct punto origine = {0, 0};

struct punto p1, p2;

...

printf ("coordinate di p1: %d, %d\n", p1.x, p1.y);

struct rettangolo { struct punto basso_s;

struct punto alto_d;

} r;

...

area = (r.alto_d.x - r.basso_s.x) *

(r.alto_d.y - r.basso_s.y);

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 8

Operazioni sulle strutture

• Copia

• Assegnazione come unico oggetto

• Indirizzamento tramite operatore &

• Manipolazione tramite l'accesso ai suoi campi

• Inizializzazione con una lista di valori costanti, uno per ogni campo

• La copia e l'assegnamento comprendono anche il passaggio di strutture alle funzioni e il ritorno di valori dalle funzioni

• Le strutture non possono essere confrontate

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 9

Esempio

struct punto {

int x;

int y;

};

double distanza

(struct punto a, struct punto b) {

/* calcola la distanza tra due punti */

return sqrt ((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));

}

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 10

Esempio

struct rettangolo {

struct punto v_as; /* vertice in alto a destra */

struct punto v _bd; /* vertice in basso a sinistra * / };

struct rettangolo dallorigine (struct punto p) {

/* costruisce un rettangolo con il vertice in basso a sinistra nell'origine e quello opposto in p */

struct rettangolo r;

r.v_as.x = 0; r.v_as.y = p.y;

r.v_bd.x = p.x; r.v_bd.y = 0;

return r;

}

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 11

Strutture ricorsive

struct list_element {

int value;

struct list_element *next;

};

value next

?

value next

value next

!

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 12

Bit field

• Alle volte può essere necessario inserire diversi oggetti in un’unica word (o unità di memoria) della macchina

• Un bit field è un insieme di bit adiacenti all’interno di una word

• La definizione di un bit field segue la sintassi propria delle strutture:

struct {

unsigned int first _field: 1;

unsigned int second_field : 3;

unsigned int third _field: 1;

} flags;

Questa dichiarazione definisce una variabile flags

che contiene tre field, il primo e il terzo di un bit, il

secondo di tre bit.

(3)

Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2)

3

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 13

Bit field

• Ai singoli field si accede in modo analogo a quanto avviene per i campi delle struct

flags .first_field = flags.third_field = 1;

flags .third_field = 5;

• I field sono equiparabili a degli interi, e quindi possono intervenire in espressioni aritmetiche

• Le operazioni sui field dipendono fortemente dalla macchina

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 14

Bit field

struct scsi_regi {

unsigned id : 3;

unsigned test : 1;

unsigned pty : 1;

unsigned ts : 1 unsigned intdis : 1 unsigned extst : 1 char data;

} r;

0

data

2 3 4 5 6 7 16

L’uso è identico a quello dei campi delle strutture:

r.id = 3;

test

scsi id

extst intdis ts pty

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 15

Union

Una union è una variabile che può contenere in istanti diversi oggetti di tipo e dimensioni differenti, condividendo lo stesso spazio in memoria.

struct tabella { char *nome;

int tipo;

union { int ival;

float fval;

char *sval;

} } tab[MAXDIM];

...

if (tab[i].tipo == INT) printf ("%d\n", tab[i].ival);

if (tab[i].tipo == FLOAT) printf ("%f\n", tab[i].fval);

if (tab[i].tipo == STRING) printf ("%s\n", tab[i].sval);

...

Fondamenti di Informatica - Linguaggio C - Struct e union

© 2001 Pier Luca Montessoro - Davide Pierattoni ( vedere nota di copyright a pag. 2) 16

Typedef

• Permette di definire dei nuovi tipi, che poi possono essere impiegati come i tipi nativi del linguaggio.

• Può essere utilizzato facendo riferimento ai tipi base:

typedef int lunghezza;

lunghezza l, maxl, *misura (struct oggetto);

oppure può essere usato per strutture e union:

typedef struct {

int x;

int y;

} punto;

punto p1, p2;

Riferimenti

Documenti correlati

© 1999 Pier Luca Montessoro (si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni

© 1999 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Le tecnologie alla base del World Wide Web (I parte). © 1999 Pier Luca Montessoro ( si veda la nota a

© 2001 Pier Luca Montessoro (si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.. Nota

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali1. Nota

Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in.. Nota