prof. Nunzio Brugaletta Programmazione e linguaggio C

EnneBi - Programmazione
Avanti Indietro Inizio


5 Tipi utente: strutture. Pile e code

5.1 Le strutture

Una struttura è un insieme di variabili di uno o più tipi, raggruppate da un nome in comune. Anche i vettori sono collezioni di variabili come le strutture solo che un vettore può contenere solo variabili dello stesso tipo, mentre le variabili contenute in una struttura non devono essere necessariamente dello stesso tipo.

Le strutture del linguaggio C coincidono con quelli che in Informatica sono comunemente definiti record. Il raggruppamento sotto un nome comune permette di rappresentare, tramite le strutture, entità logiche in cui le variabili comprese nella struttura rappresentano gli attributi di tali entità.

Per esempio con una struttura si può rappresentare l’entità libro i cui attributi potrebbero essere: titolo, autore, editore, prezzo. In tale caso la definizione sarà:

typedef struct rec {
  char titolo[50]; 
  char autore[20]; 
  char editore[20]; 
  float prezzo; 
}libro;

Viene applicata la struttura sintattica per la definizione di un tipo utente. Oltre ai tipi elementari previsti dal linguaggio, da questo momento in poi è definito un nuovo tipo. La sintassi del linguaggio prevede, dopo la parola chiave typedef struct, e un nome scelto dal programmatore (in questo esempio rec), le parentesi graffe all'interno delle quali vengono dichiarate le variabili che fanno parte della struttura (i membri della struttura). La dichiarazione termina con un nome scelto dal programmatore (nel caso in esame libro), il tag della struttura, che identifica la struttura stessa. È bene chiarire che in questo modo si definisce la struttura logica libro, che descrive l’aspetto della struttura, e non un posto fisico dove conservare i dati. In pratica si può considerare come se si fosse definito, per esempio, come è composto il tipo int: ciò è necessario per poter dichiarare variabili di tipo int.

Dal punto di vista della sintassi, in realtà, il nome rec che si è utilizzato per la dichiarazione della struttura, potrebbe, in questo caso, mancare. Si è preferito tuttavia utilizzarlo per coerenza con applicazioni successive che, invece, lo richiedono esplicitamente.

#include <stdio.h>
...
typedef struct rec {	/*1*/
  char titolo[50]; 
  char autore[20]; 
  char editore[20]; 
  float prezzo; 
}libro;
...
main(){
  libro lib1,lib2;	/*2*/
  ... 
  gets(lib1.titolo);	/*3*/ 
  ... 
  printf("%f",lib2.prezzo);	/*4*/ 
  ... 
}

Dalla riga 1 inizia la dichiarazione del tipo libro. La dichiarazione è globale in modo che tutte le funzioni presenti possano accedere a tale definizione. Si evita così di ridefinire la struttura in ogni funzione.

Nella 2 si dichiarano due istanze (lib1 e lib2) di libro (due variabili del nuovo tipo libro).

La funzione della 3 effettua l’input nella componente titolo della istanza lib1. Per fare riferimento ad una componente deve infatti essere specificata l’istanza oltre che la componente: i due nomi sono separati dal punto. La specifica dell’istanza è indispensabile: ci sono infatti, nel caso in esame, due titolo (quello di lib1 e quello di lib2). Analogo discorso vale per la componente prezzo: la 4 infatti si occupa dell’output di tale componente relativamente all’istanza lib2.



Avanti Indietro Inizio

http://ennebi.solira.org ennebi@solira.org