RE:Que realmente es una union?
Imagina que en una estructura quieres guardar datos de deportistas (nombre, apellidos, deporte y mejor marca). Resulta que la mejor marca será una cosa distinta en función del deporte (número de goles en un solo partido, tiempo en realizar una carrera, canastas en un partido, etc, etc). Este último campo, sobre todo si fueran tipos distintos (unos int, otros float, otros char[]) sería ideal para hacer con una unión:
struct deportista
{
char nombre[20];
char apellidos[20];
char deporte [20];
union marca
{
float mejor_tiempo;
int numero_goles;
int numero_canastas;
}
};
De los tres últimos campos, sólo uno tiene sentido en cada deportista. Los tres campos ocupan la misma zona de memoria y lo leerías correctamente como
deportista.marca.mejor_tiempo o
deportista.marca.numero_goles.
Es asunto tuyo recordar en cada variable deportista, cómo guardaste la marca para leerla luego correctamente (recuerda, son tipos distintos). Te dará resultados inesperador escribir deportista.marca.numero_goles = 10 y luego tratar de leer, en la misma variable deportista.marca.mejor_tiempo.
No es necesario que todos los campos de la unión tengan el mimo tamaño. El compilador siempre reservará hueco para el más grande de ellos.
En resumen, que si en una estructura o variable el tipo debe ser distinto en función de alguna otra cosa que tengas (por ejemplo, tipo de deporte), puedes usar una union para tener todas las posibilidades ocupando un mínimo de memoria.
Se bueno