Immagina di avere una struttura che contiene un pacchetto di dati. I dati nel pacchetto possono essere di diversi tipi, quindi è possibile memorizzare il tipo in un membro chiamato type. Quindi, per leggere i dati in questo pacchetto, prima si controlla il tipo, quindi si legge il membro dati corrispondente, che dovrebbe contenere i dati nel pacchetto.
Senza sindacati struct dati sarebbe simile a questa:
struct data {
type_t type;
int number;
char * string;
double fraction;
long long big_number;
}
Questo sarebbe un piuttosto grande struttura di dati. Usa abbastanza spazio per memorizzare uno di tutti i tipi di dati possibili. Questo è un po 'inutile quando avrai sicuramente solo uno di quei membri che contiene informazioni utili in qualsiasi momento.
se usiamo i sindacati:
struct data {
type_t type;
union payload {
int number;
char * string;
double fraction;
long long big_number;
}
}
Poi la struct contiene un'unica spazio sufficiente per memorizzare il tipo più uno dei membri del carico utile (cioè si avrà assegnata una quantità di memoria pari alla dimensione di type_t più la dimensione del più grande membro del payload possibile). Ciò consente di risparmiare un sacco di spazio ed è molto più efficiente.
Si deve fare attenzione tuttavia, perché se il carico utile contiene un int, è ancora possibile leggerlo come un doppio.Probabilmente otterrai numeri estremamente strani mentre il tuo programma cerca di interpretare i dati in modo errato
fonte
2011-08-26 18:46:21
Beh, cosa ha portato alla tua domanda? Lo scopo dei sindacati è condividere il tempo un'area di memoria, cioè per memorizzare i diversi tipi di dati in momenti diversi nella stessa regione di memoria.Questo può funzionare ovunque, vale a dire un sindacato può essere usato da solo o può essere usato come membro di una struttura.Non c'è assolutamente nulla di speciale o strano in unione viene utilizzato all'interno di una struttura.Per questo motivo, non è chiaro il motivo per cui lo stai chiedendo. – AnT