Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Il talento senza genio ? poca cosa. Il genio senza talento ? nulla.

Paul Val?ry 

Sondaggio:

Ti senti un sopravvissuto a...

Grande Fratello
Euro
tua mamma
tua suocera
le feste natalizie
la scuola
i tuoi ex
il/la partner

visualizza risultati


 

Strutture

Gli array permettono di raccogliere sotto un unico nome piu` variabili omogenee e sono solitamente utilizzati quando bisogna operare su piu` valori dello stesso tipo contemporaneamente (ad esempio per eseguire una ricerca). Tuttavia in generale per rappresentare entita` complesse e` necessario memorizzare informazioni di diversa natura; ad esempio per rappresentare una persona puo` non bastare una stringa per il nome ed il cognome, ma potrebbe essere necessario memorizzare anche eta` e codice fiscale. Memorizzare tutte queste informazioni in un'unica stringa non e` una buona idea poiche` le singole informazioni non sono immediatamente disponibili, ma e` necessario prima estrarle, inoltre nella rappresentazione verrebbero perse informazioni preziose quali il fatto che l'eta` e` sempre data da un intero positivo. D'altra parte avere variabili distinte per le singole informazioni non e` certamente una buona pratica, diventa difficile capire qual'e` la relazione tra le varie componenti. La soluzione consiste nel raccogliere le variabili che modellano i singoli aspetti in un'unica entita` che consenta ancora di accedere ai singoli elementi:

 

struct Persona {
  char Nome[20];
  unsigned short Eta;
  char CodiceFiscale[16];
};

 

La precedente dichiarazione introduce un tipo struttura di nome Persona composto da tre campi: Nome (un array di 20 caratteri), Eta (un intero positivo), CodiceFiscale (un array di 16 caratteri).
La sintassi per la dichiarazione di una struttura e`

struct < NomeTipo > {
  < Tipo > < NomeCampo > ;
  /* ... */
  < Tipo > < NomeCampo > ;
};

Si osservi che la parentesi graffa finale deve essere seguita da un punto e virgola, questo vale anche per le unioni, le enumerazioni e per le classi.
I singoli campi di una variabile di tipo struttura sono selezionabili tramite l'operatore di selezione . (punto), come mostrato nel seguente esempio:

 

struct Persona {
  char Nome[20];
  unsigned short Eta;
  char CodiceFiscale[7];
};

Persona Pippo = { "Pippo", 40, "PPP718" };
Persona AmiciDiPippo[2] = { {"Pluto", 40, "PLT712"},
                            {"Minnie", 35, "MNN431"}
                          };

// esempi di uso di strutture:

Pippo.Eta = 41;
unsigned short Var = Pippo.Eta;
strcpy(AmiciDiPippo[0].Nome, "Topolino");

 

Innanzi tutto viene dichiarato il tipo Persona e quindi si dichiara la variabile Pippo di tale tipo; in particolare viene mostrato come inizializzare la variabile con una inizializzazione aggregata del tutto simile a quanto si fa per gli array, eccetto che i valori forniti devono essere compatibili con il tipo dei campi e dati nell'ordine definito nella dichiarazione. Viene mostrata anche la dichiarazione di un array i cui elementi sono di tipo struttura, e il modo in cui eseguire una inizializzazione fornendo i valori necessari all'inizializzazione dei singoli campi di ciascun elemento dell'array. Le righe successive mostrano come accedere ai campi di una variabile di tipo struttura, in particolare l'ultima riga assegna un nuovo valore al campo Nome del primo elemento dell'array tramite una funzione di libreria. Si noti che prima viene selezionato l'elemento dell'array e poi il campo Nome di tale elemento; analogamente se e` la struttura a contenere un campo di tipo non primitivo, prima si seleziona il campo e poi si seleziona l'elemento del campo che ci interessa:

 

struct Data {
  unsigned short Giorno, Mese;
  unsigned Anno;
};

struct Persona {
  char Nome[20];
  Data DataNascita;
};

Persona Pippo = { "pippo", {10, 9, 1950} };

Pippo.Nome[0] = 'P';
Pippo.DataNascita.Giorno = 15;
unsigned short UnGiorno = Pippo.DataNascita.Giorno;

 

Per le strutture, a differenza degli array, e` definito l'operatore di assegnamento:

 

struct Data {
  unsigned short Giorno, Mese;
  unsigned Anno;
};

Data Oggi = { 10, 11, 1996 };
Data UnaData = { 1, 1, 1995};

UnaData = Oggi;

 

Cio` e` possibile per le strutture solo perche`, come vedremo, il compilatore le tratta come classi i cui membri sono tutti pubblici.
L'assegnamento e` ovviamente possibile solo tra variabili dello stesso tipo struttura, ma quello che di solito sfugge e` che due tipi struttura che differiscono solo per il nome sono considerati diversi:

 

// con riferimento al tipo Data visto sopra:

struct DT {
  unsigned short Giorno, Mese;
  unsigned Anno;
};

Data Oggi = { 10, 11, 1996 };
DT Ieri;

Ieri = Oggi; // Errore di tipo!

 

 

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2022 Cataldo Sasso