Imagine que tiene una estructura que sostiene un paquete de datos. Los datos en el paquete pueden ser de algunos tipos diferentes, por lo que almacena el tipo en un miembro llamado tipo. Entonces, para leer los datos en este paquete, primero verifica el tipo, luego lee el miembro de datos correspondiente, que debe contener los datos en el paquete.
Sin sindicatos la estructura de datos se vería así:
struct data {
type_t type;
int number;
char * string;
double fraction;
long long big_number;
}
Ésta sería una estructura de datos bastante grande. Utiliza suficiente espacio para almacenar uno de cada tipo de datos posible. Eso es un poco innecesario cuando definitivamente solo tendrá uno de esos miembros que contenga información útil en cualquier momento.
Si utilizamos los sindicatos:
struct data {
type_t type;
union payload {
int number;
char * string;
double fraction;
long long big_number;
}
}
A continuación, la estructura incluye solamente el espacio suficiente para almacenar el tipo más uno de los miembros de carga útil (es decir, se le ha asignado una cantidad de memoria igual al tamaño de type_t plus el tamaño del miembro de carga útil más grande posible). Esto ahorra una gran cantidad de espacio y es mucho más eficiente.
Sin embargo, debe tener cuidado, ya que si la carga contiene un int, puede leerlo como un doble.Probablemente obtendrá números extremadamente extraños cuando su programa intente interpretar los datos erróneamente
Bien, ¿qué llevó exactamente a su pregunta? El propósito de los sindicatos es compartir el tiempo un área de memoria, es decir, almacenar los diferentes tipos de datos en diferentes momentos en la misma región de memoria. Esto puede funcionar en cualquier lugar, es decir, una unión puede usarse sola o puede usarse como miembro de una estructura. No hay absolutamente nada especial o extraño en unión siendo utilizado dentro de una estructura. Por esta razón, no está claro por qué estás preguntando esto. – AnT