Concetti Chiave

  • Le strutture in C raggruppano variabili di diversi tipi e sono dichiarate con campi specificati da un tipo e un nome.
  • È possibile annidare strutture fino a un massimo di 15 livelli e 127 membri in una singola dichiarazione.
  • I dati sono memorizzati in modo contiguo in memoria, ma possono presentare spazi di padding per l'allineamento.
  • L'accesso ai campi di una struttura avviene tramite l'operatore “.”, mentre le dichiarazioni opache consentono di riferirsi a strutture senza mostrarne il contenuto.
  • Le variabili di tipo struct possono essere inizializzate solo al momento della loro dichiarazione, non successivamente.

Le strutture sono tipi di dato che raggruppano una o più variabili, anche di tipo diverso, permettendo così da raggrupparle. Questo tipo di dato è presente in tutti i linguaggi e in alcuni le strutture vengono chiamate record.

Dichiarazione e annidamento

In C la dichiarazione di una struct è composto dalla dichiarazioni di variabili dette campi o membri, è necessario che ognuno di essi abbia specificato un tipo ed un nome.

struct [tag] {

;

;

tipoN>;

};

Il tag è opzionale e se viene dichiarato successivamente si può far riferimento ad esso, altrimenti la variabile è di tipo enumerativo vuoto.

Inoltre è possibile annidare strutture all’interno di altre strutture, anche se con limiti: massimo 15 livelli di annidamento e massimo 127 membri in una singola dichiarazione di struttura.

Queste due strutture sono equivalenti.

Memoria e inizializzazione

In memoria i dati sono salvati in modo contiguo e nello stesso ordine definito nell’implementazione, però tra un campo e l’altro possono essere presenti spazi di memoria di allineamento formati da bit di padding non utilizzabili, per rendere le dimensioni della struttura un multiplo del byte. L’indirizzo di una struct coincide sempre con l’indirizzo del suo primo membro.

È possibile inizializzare il valore di una variabili di tipo struct o con la lista dei valori stessi tra {{ , }{ , }} o anche assegnando il valore di un’altra variabile dello stesso tipo (con lo stesso tag).

Non è possibile inizializzare i membri di una struttura nella dichiarazione di tipo, ma è possibile inizializzare il valore di una variabile di tipo struct solo al momento della sua dichiarazione, non in seguito.

Accesso e dichiarazioni opache

Per accedere ai campi delle variabili si usa l’operatore “.” . Non è possibile usare gli altri operatori con le variabili, ma solamente con i singoli campi che appartengono alla struttura.

È possibile fare dichiarazioni vuote di tipo struct prima di dichiarare la struttura stessa del tipo (=forward declaration), in questo caso si parla di dichiarazione opaca. Questo tipo di dichiarazione viene utilizzata per mostrare il nome della struttura a file esterni, senza farne vedere il contenuto. La forward declaration può essere usata come struttura autoreferenziale, le strutture contengono campi il cui tipo e la struttura stessa.

In C c’è una limitazione ovvero i campi devono essere di tipo puntatore alla struttura.

Domande da interrogazione

  1. Qual è la funzione principale delle strutture nei linguaggi di programmazione?
  2. Le strutture raggruppano una o più variabili, anche di tipo diverso, permettendo di organizzare i dati in modo più efficiente (come indicato nel testo).

  3. Quali sono i limiti relativi all'annidamento delle strutture in C?
  4. In C, è possibile annidare strutture all'interno di altre strutture, con un massimo di 15 livelli di annidamento e 127 membri in una singola dichiarazione di struttura (come specificato nel testo).

  5. Come si accede ai campi di una struttura in C?
  6. Per accedere ai campi delle variabili di tipo struct si utilizza l'operatore “.”, mentre non è possibile utilizzare altri operatori con le variabili, ma solo con i singoli campi (come descritto nel testo).

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community