La Unión es un tipo de datos definido por el usuario en lenguaje C que puede contener elementos de diferentes tipos de datos al igual que la estructura. Pero a diferencia de las estructuras, todos los miembros de la unión C se almacenan en la misma ubicación de memoria. Debido a esto, sólo un miembro puede almacenar datos en la instancia determinada.

Sintaxis de unión en C
La sintaxis de la unión en C se puede dividir en tres pasos que son los siguientes:
C Declaración de la Unión
En esta parte, solo declaramos la plantilla del sindicato, es decir, solo declaramos los nombres y tipos de datos de los miembros junto con el nombre del sindicato. No se asigna memoria al sindicato en la declaración.
union union_name { datatype member1 ; datatype member2 ; ... };>
Ten en cuenta que siempre tenemos que terminar la declaración de unión con punto y coma.
Diferentes formas de definir una variable de unión
Necesitamos definir una variable del tipo unión para comenzar a usar miembros del sindicato. Hay dos métodos mediante los cuales podemos definir una variable de unión.
- Con Declaración de Unión
- Después de la Declaración de la Unión
1. Definición de variable de unión con declaración
union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>
2. Definición de variable de unión después de la declaración
union union_name var1, var2, var3 ...;>
dónde nombre_union es el nombre de un sindicato ya declarado.
Acceder a miembros del sindicato
Podemos acceder a los miembros de una unión usando el operador de punto (.) al igual que las estructuras.
var1.member1 ;>
dónde var1 es el variable de unión y miembro1 es el miembro del sindicato .
El método anterior para acceder a los miembros del sindicato también funciona para los sindicatos anidados.
var1.member1.memberA;>
Aquí,
- var1 es una variable de unión.
- miembro1 es miembro del sindicato.
- miembroA es miembro de miembro1.
Inicialización de unión en C
La inicialización de una unión es la inicialización de sus miembros simplemente asignándole el valor.
var1.member1 = some_value ;>
Una cosa importante a tener en cuenta aquí es que sólo un miembro puede contener algún valor en un momento dado.
Ejemplo de unión
C
// C Program to demonstrate how to use union> #include> // union template or declaration> union> un {> > int> member1;> > char> member2;> > float> member3;> };> // driver code> int> main()> {> > // defining a union variable> > union> un var1;> > // initializing the union member> > var1.member1 = 15;> > printf> (> 'The value stored in member1 = %d'> ,> > var1.member1);> > return> 0;> }> |
>
>Producción
The value stored in member1 = 15>
Tamaño de la Unión
El tamaño de la unión siempre será igual al tamaño del miembro más grande de la matriz. Todos los elementos de menor tamaño pueden almacenar los datos en el mismo espacio sin desbordamiento.

Asignación de memoria en C Union
Ejemplo 1: programa en C para encontrar el tamaño de la unión
C
// C Program to find the size of the union> #include> // declaring multiple unions> union> test1 {> > int> x;> > int> y;> } Test1;> union> test2 {> > int> x;> > char> y;> } Test2;> union> test3 {> > int> arr[10];> > char> y;> } Test3;> // driver code> int> main()> {> > // finding size using sizeof() operator> > int> size1 => sizeof> (Test1);> > int> size2 => sizeof> (Test2);> > int> size3 => sizeof> (Test3);> > printf> (> 'Sizeof test1: %d
'> , size1);> > printf> (> 'Sizeof test2: %d
'> , size2);> > printf> (> 'Sizeof test3: %d'> , size3);> > return> 0;> }> |
>
>
tabla javaProducción
Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>
Diferencia entre estructura C y unión C
La siguiente tabla enumera la diferencia clave entre la estructura y la unión en C:
Estructura | Unión |
---|---|
El tamaño de la estructura es igual o mayor que el tamaño total de todos sus miembros. | El tamaño del sindicato es el tamaño de su miembro más grande. |
La estructura puede contener datos en varios miembros al mismo tiempo. | Sólo un miembro puede contener datos al mismo tiempo. |
Se declara utilizando la palabra clave struct. | Se declara utilizando la palabra clave union. |
Preguntas frecuentes sobre sindicatos C
1. ¿Cuál es el tamaño de la unión dada?
union un { int a; int arr[20]; }>
Respuesta: El tamaño de la unión dada es 20 x 4 bytes = 80 bytes. Incluso si la matriz es una colección de elementos de datos similares, el compilador de C la considera una entidad única.
2. ¿Podemos almacenar datos de varios miembros del sindicato al mismo tiempo?
No. Sólo podemos almacenar datos en un único miembro al mismo tiempo. Por ejemplo, en el siguiente programa en C, tanto x como y comparten la misma ubicación. Si cambiamos x, podemos ver los cambios reflejados en y.
C
// C program to check if we can store data in multiple union> // members> #include> // Declaration of union is same as structures> union> test {> > int> x, y;> };> int> main()> {> > // A union variable t> > union> test t;> > t.x = 2;> // t.y also gets value 2> > printf> (> 'After making x = 2:
x = %d, y = %d
'> , t.x,> > t.y);> > t.y = 10;> // t.x is also updated to 10> > printf> (> 'After making y = 10:
x = %d, y = %d
'> , t.x,> > t.y);> > return> 0;> }> |
>
>Producción
After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>
3. ¿Cuáles son las aplicaciones de los sindicatos?
Las uniones pueden resultar útiles en muchas situaciones en las que queremos utilizar la misma memoria para dos o más miembros. Por ejemplo, supongamos que queremos implementar una estructura de datos de árbol binario donde cada nodo hoja tiene un valor de datos doble, mientras que cada nodo interno tiene punteros a dos hijos, pero no datos. Si declaramos esto como:
C
struct> NODE {> > struct> NODE* left;> > struct> NODE* right;> > double> data;> };> |
>
>
largo a int java
entonces cada nodo requiere 16 bytes, desperdiciando la mitad de los bytes para cada tipo de nodo. Por otro lado, si declaramos un nodo como el siguiente, podemos ahorrar espacio.
C
struct> NODE {> > bool> is_leaf;> > union> {> > struct> {> > struct> NODE* left;> > struct> NODE* right;> > } internal;> > double> data;> > } info;> };> |
>
>