Linguaggio C Struct e union

Похожие документы
Input/output in C e in C++

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione audio

IL CABLAGGIO STRUTTURATO DI CATEGORIA 6

Tecniche di compressione senza perdita

Memoria cache, interrupt e DMA

Interconnessione di reti IP

Internet and Intranet Access

Linguaggio C Espressioni e operatori

Esercizi di Addressing. Fulvio Risso Guido Marchetto

Linguaggio C - sezione dichiarativa: costanti e variabili

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Il collegamento delle reti aziendali: DHCP, DSL, PPPoE

Linguaggio C Compilazione, linking e preprocessor

Linguaggio C: puntatori

Istruzioni iterative (o cicliche)

FONDAMENTI DI INFORMATICA. Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine. Compressione MPEG

Definizione di classi

Codifica dei numeri reali

FONDAMENTI DI MATEMATICA BINARIA

Cenni sull ingegneria del software e sulla qualità dei programmi

Linguaggio C La libreria standard

Reti logiche e componenti di un elaboratore

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Codifica delle immagini

Strutture dati e loro organizzazione. Gabriella Trucco

Esercizio 1 Liste: calcolo perimetro di un poligono

Il linguaggio C. Notate che...

Linguaggio C: introduzione

Fondamenti di Informatica T-1 Modulo 2

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Linguaggio C: le funzioni

Gestione della memoria centrale

Espressione di chiamata di funzione

Scrittura formattata - printf

Variabili e Istruzioni

La sintassi del C APPENDICE H

Programmazione in Java (I modulo)

Esercizi di programmazione in C

Array multidimensionali e stringhe

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Dalla prima lezione. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 7 VARIABILI E COSTANTI 28/02/2016. Concetto di algoritmo

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

Algoritmi e basi del C Struttura di un programma

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Introduzione alla programmazione in C

LE STRUTTURE DATI PARTE 2: RECORD. Prof. G. Ciaschetti

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Codifica delle immagini

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Caratteristiche di un linguaggio ad alto livello

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

Транскрипт:

FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C Struct e union 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1

Nota di Copyright Questo insieme di 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 di 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 di 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 in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di 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 ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali. 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2

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 residenza char via[32] int numero char cap[6] char citta[32] 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3

parola chiave Sintassi nome della struttura campi, o membri, della struttura struct punto int x; int y; }; struct punto p1, p2; variabili di tipo struct punto 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4

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! struct punto int x; int y; }; struct punto p1; dichiarazione definizione struct punto int x; int y; } p1; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5

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; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6

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); 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7

Copia Operazioni sulle strutture 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 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8

struct punto int x; int y; }; Esempio 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)); } 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9

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; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10

Strutture ricorsive struct list_element int value; struct list_element *next; }; value next value next value next?! 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 11

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. 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 12

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 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13

Bit field 16 7 6 5 4 3 2 0 data extst intdis ts pty test scsi id struct scsi_regi unsigned id : 3; unsigned test : 1; unsigned pty : 1; unsigned ts : 1 unsigned intdis : 1 unsigned extst : 1 char data; } r; L uso è identico a quello dei campi delle strutture: r.id = 3; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14

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);... 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15

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; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16