Concetti Chiave
- Il tipo di dato union permette di memorizzare diversi tipi di dati nella stessa locazione di memoria, ma solo un membro può contenere un valore in un dato momento.
- Le union sono usate per ottimizzare l'uso della memoria, condividendo la stessa locazione di memoria tra i campi.
- La dimensione di una union è determinata dal campo di maggiore dimensione e le regole di dichiarazione sono simili a quelle delle struct.
- Il typedef consente di creare nuovi nomi per i tipi di dato, migliorando la leggibilità e la portabilità del codice.
- Typedef può essere utilizzato per definire nuovi tipi di dato anche per funzioni, standardizzando il comportamento del codice.
Tipo dato union e typedef
Il tipo di dato union è un tipo di dato che può contenere tipi di dato differente nella stessa locazione di memoria, ma solo un membro contiene un valore in un preciso momento, i campi condividono quindi la stessa locazione di memoria e si escludono a vicenda. I tipi di dati union vengono utilizzate per ottimizzare l’uso della memoria. Si può accedere al contenuto delle varie union tramite l’utilizzo degli operatori ”.” e “->”. La union può essere inizializzata fornendo esclusivamente il valore del tipo del suo primo membro.
union [tag] {
…
tipoN>
};
Il tag è opzionale e la dimensione di un tipo union è uguale alla dimensione del tipo di dato del campo più grande. Gli operatori si comportano come nel tipo di dato struct e i limiti di annidamento e numero di campi è lo stesso di struct. Le regole usate per la dichiarazione di variabili sono le stesse per enum e struct.
Solitamente si usa union con un discriminante, che tiene traccia del campo valido in un dato momento, ma è necessario annidare la union in una struct.
struct xtype {
unsigned int type; //discriminante
union { char ctype ; int itype ; float ftype ; double dtype ;} val ;
};
L’operatore typedef permette di creare nuovi nomi per i tipi di dato. Il nome dichiarato diventa sinonimo per il tipo di dato dichiarato, quindi i nuovi tipi sono trattati come quelli originari.
typedef
E possibile usare l’operatore typedef anche per definire come nuovo tipo di dato una funzione
typedef
L’operatore typedef viene spesso usato per nascondere come il compilatore gestisce alcuni tipi di dato, fornendo un comportamento standard e aumentando la portabilita del codice (es.size_t nella libreria stddef.h dichiara un unsigned int che rappresenta la dimensione in byte di un oggetto, di solito i nomi dei tipi di dato che terminano con _t sono nomi riservati).
Domande da interrogazione
- Qual è la funzione principale del tipo di dato union?
- Come si utilizza l'operatore typedef?
- Qual è la differenza tra union e struct in termini di memoria?
Il tipo di dato union permette di contenere tipi di dato differenti nella stessa locazione di memoria, ottimizzando l'uso della memoria, ma solo un membro può contenere un valore in un dato momento.
L'operatore typedef viene utilizzato per creare nuovi nomi per i tipi di dato, rendendo il codice più portabile e nascondendo la gestione dei tipi da parte del compilatore.
Mentre una struct alloca memoria per tutti i suoi membri, una union condivide la stessa locazione di memoria tra i suoi membri, avendo una dimensione pari al campo più grande.