• Non ci sono risultati.

Dispensa II.6

N/A
N/A
Protected

Academic year: 2021

Condividi "Dispensa II.6"

Copied!
5
0
0

Testo completo

(1)

Dispensa II.6 versione 1.0 mail: [email protected] 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: [email protected] 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: [email protected] 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: [email protected] 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: [email protected] 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).

Riferimenti

Documenti correlati

ƒ restituisce un puntatore che contiene l’indirizzo del blocco di memoria allocato, cioè della variabile, la quale sarà quindi accessibile dereferenziando il puntatore. ƒ la

[4 pt] Si dia un intervallo di confidenza per la media di una distribuzione normale, di varianza incognita, e si diano espressione esplicite (in funzione degli elementi campionari)

Generalmente il confronto può essere fatto tra due generici puntatori che puntano allo stesso tipo di dato; questo confronto è comunque significativo solo nel caso in

 Evitare l'uso di array paralleli trasformandoli in array Evitare l'uso di array paralleli trasformandoli in array di oggetti:.

=⇒ Non serve specificare la dimensione del vettore nel parametro formale ( `e un puntatore al tipo degli elementi del vettore).. Quando passiamo una matrice ad una funzione, per

In [7] si dimostra che l'esistenza di ahneno uno stato di massa nulla e spin-3/2 assicura anche l'esistenza di un numero uguale di fermioni e di bosoni ad ogni livello di massa (

codice strumento prezzo FLT flauto 2500 VLN violino 8000. $inv_art

• 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