Dispensa II.6

Download (0)

Full text

(1)

Dispensa II.6 versione 1.0 mail: lamonica@associatesonline.it Pagina 1 di 5

STRUTTURE

La dispensa di seguito proposta si pone come tutorial per poter porre le basi per la creazione di strutture e la loro gestione dinamica nel linguaggio C / C ++

La struttura ( struct )

Le strutture del C sostanzialmente permettono l’aggregazione di più variabili, in modo simile a quella degli array, ma a differenza di questi non ordinata e non omogenea (una struttura può contenere variabili di tipo diverso). Per denotare una struttura si usa la parola chiave struct seguita dal nome identificativo della struttura, che è opzionale.

// dichiarazione della struct struct libro

{

char titolo[100];

char autore[50];

int anno_pubblicazione;

float prezzo;

};

//dichiarazione dell'istanza biblio struct libro biblio;

(2)

Dispensa II.6 versione 1.0 mail: lamonica@associatesonline.it Pagina 2 di 5

La definizione di nuovi tipo ( typedef )

Per definire nuovi tipi di dato viene utilizzata la funzione typedef. L’uso di typedef, combinato con struct ci permette di creare tipi di dato molto complessi, come mostrato nell’esempio seguente:

typedef struct libro {

char titolo[100];

char autore[50];

int anno_pubblicazione;

float prezzo;

} t_libro;

t_libro guida = {"Guida al C", "Fabrizio Ciacchi", 2003, 45.2};

Definito un nuovo tipo di nome t_libro, ( tipo complesso composto da una struttura), è possibile utilizzare il nuovo tipo come ogni altro, ad esempio possiamo creare un array di elementi di tipo t_libro.

t_libro raccolta[5000];

Per accedere agli elementi dell’array, o per inizializzare i valori, è sufficiente utilizzare l’indice per identificare l’elemento dell’array ed il punto (.) per accedere alle variabili interne del tipot_libro.

(3)

Dispensa II.6 versione 1.0 mail: lamonica@associatesonline.it Pagina 3 di 5 // assegna un valore al prezzo del 341mo libro

raccolta[340].prezzo = 67.32;

// assegna ad una variabile int l'anno di pubblicazione del 659mo libro int anno = raccolta[658].anno_pubblicazione;

// stampa il titolo del 23mo libro printf ("%s n", raccolta[22].titolo);

(4)

Dispensa II.6 versione 1.0 mail: lamonica@associatesonline.it Pagina 4 di 5

Puntatori e strutture

Definiamo un record e dichiariamo una variabile puntatore:

typedef struct {

int PrimoCampo;

char SecondoCampo;

} TipoDato;

TipoDato x, *P;

P = &x;

Per accedere al primo campo della variabile x attraverso il puntatore p dobbiamo usare la “dot notation”

(*P).PrimoCampo = 12;

/* Inserisce 12 nel campo PrimoCampo di x */

Oppure è possibile utilizzare la forma abbreviata

P–>PrimoCampo = 12;

(5)

Dispensa II.6 versione 1.0 mail: lamonica@associatesonline.it Pagina 5 di 5

Operatore sizeof

L’operatore sizeof produce il numero di byte occupati da ciascun elemento di un array o da un array nel suo complesso.

Supponendo che si usano quattro byte (un word … in italiano una parola) per la memorizzazione di un valore int:

int a[5];

sizeof(a[2]) Restituisce il valore 4

sizeof(a) Restituisce il valore 20.

Il nome di una variabile di tipo array viene considerato in C come l’indirizzo della prima parola di memoria che contiene il primo elemento della variabile di tipo array (lo 0-esimo …).

Se ne deduce:

• a “punta” a una parola di memoria esattamente come un puntatore;

• a punta sempre al primo elemento della variabile di tipo array (è un puntatore “fisso” al quale non è possibile assegnare l’indirizzo di un’altra parola di memoria).

Figure

Updating...

References

Related subjects :