Le unioni sono tipi di dato derivato costituite da un insieme di elementi, allocati in memoria in modo sovrapposto.
Il loro funzionamento é molto simile a quello delle strutture con la differenza però che mentre per la strutture viene riservata una congrua quantità di memoria necessaria alla memorizzazione di tutti i loro membri, le unioni riservano solo la quantità di memoria necessaria al più capiente dei suoi membri. Ne consegue che un’unione può contenere, alternativamente, solo 1 dei membri dichiarati.
La dichiarazione di un unione avviene attraverso la keyword union, in questo modo:
union tag_unione {
int membro1;
long membro2;
} identificatore_unione;
//La struttura avrà dimensioni pari al tipo di variabile più grande, cioè long
L’accesso, la scrittura, o la manipolazione dei membri avviene allo stesso modo delle strutture. Ne consegue che:
- le unioni possono essere copiate
- si possono definire con typedef
- si possono dichiarare senza nome
- possono essere annidate
- possono contenere array e possono essere contenute in array
- possono essere puntate
- possono essere argomenti di funzione o return
- possono avere membri anonimi
- possono essere campi di bit
Casi d’uso
Le unioni offrono il vantaggio di consentire un certo risparmio di memoria e risorse come anche quello di definire un tipo che può contenere tipi di dato differenti.