C/C++ Uniones · 5 min read · Oct 10, 2025
Aprendiendo C/C++ Paso a Paso - Página 11
11. Paso a Paso C/C++ — Programación en C - Uniones
Uniones
| | 1. Introducción
- Acerca de la Unión
- Declaración de una Unión
- Definición de una Variable de Unión
- Diferencia entre Estructura y Unión
- Operaciones en Uniones
- Alcance de una Unión |
1. Introducción
| | / 81_union.c /
#include
struct s_emp
{
int eno;
char name[20];
float sal;
};
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
struct s_emp se;
union u_emp ue;
printf(“\nTamaño de la estructura de Empleado : %d”, sizeof(se));
printf(“\nTamaño de la Unión de Empleado : %d”, sizeof(ue));
return 0;
} | | | Salida: Tamaño de la Estructura de Empleado : 26
Tamaño de la Unión de Empleado : 20 |
2. Acerca de la Unión
Cuando se solicita un gran número de variables para usar en un programa, ocupan una gran cantidad de memoria. Las uniones proporcionan una forma más fácil de ahorrar memoria utilizando la técnica de reemplazo. Utiliza la misma ubicación de memoria para todos los tipos de variables.
Una unión es un tipo de dato en C, que permite la superposición de más de una variable en la misma área de memoria.
Características de las Uniones:
| | 1. La unión almacena valores de diferentes tipos en una sola ubicación en la memoria.
- Una unión puede contener uno de muchos tipos diferentes de valores, pero solo uno se almacena a la vez.
- La unión solo mantiene un valor para un tipo de dato. Si se realiza una nueva asignación, el valor anterior no tiene validez.
- Puede haber cualquier número de miembros de unión presentes. Pero la variable de tipo unión ocupa la mayor memoria ocupada por sus miembros. |
3. Declaración de una Unión
La unión es un tipo de dato a través del cual se pueden almacenar objetos de diferentes tipos y tamaños en diferentes momentos. La definición de una unión es la misma que la de una estructura. El único cambio en la declaración es la sustitución de la palabra clave union por la palabra clave struct.
| |
|
Ej:
| | union ddate
{
int day;
int month;
int year;
}; | union student
{
int sno;
char name[20];
int marks;
float avg;
}; |
4. Definición de una Variable de Unión
Definir una variable de unión es lo mismo que definir una estructura y lo mismo que definir un tipo de dato incorporado como int.
| | int a; / Válido /
union date d; / Válido en C y C++ / |
Cálculo del tamaño de la Unión
Cada tipo de dato en C/C++ tiene un tamaño especificado, es decir, int tiene 2 bytes de tamaño, float tiene 4 bytes de tamaño, y así sucesivamente. Aquí está la forma de encontrar el tamaño de una variable de unión.
sizeof:- Esta función se utiliza para encontrar el tamaño de una variable dada.
| | printf(“%d”, sizeof(int)); / 2 /
printf(“%d”, sizeof(float)); / 4 /
printf(“%d”, sizeof(union emp)); / Muestra el tamaño de la unión emp / |
5. Diferencia entre Estructuras y Uniones
Aquí está la diferencia entre Estructuras y Uniones
| Estructura | Unión ** |
| 1. Puede contener diferentes tipos (variables) en una sola ubicación. | 1. Puede contener diferentes tipos (variables) en diferentes ubicaciones. |
| 2. Puede contener más de un tipo (variable) pero solo uno se almacena a la vez. | 2. Puede contener más de un tipo (variable) todos se almacenan en memoria a la vez. |
| 3. Puede haber cualquier número de miembros de unión presentes. Pero la variable de tipo unión ocupa la mayor memoria ocupada por su miembro. | 3. Requiere memoria del tamaño de todos sus miembros. |
| 4. En su proceso, solo se puede acceder a un miembro a la vez. | 4. En su proceso, todos los miembros se pueden acceder en cualquier momento. |
| 5. El alcance de la unión es la función y el alcance de sus miembros es también el mismo que la unión misma. (Se pueden acceder directamente en el programa). | 5. El alcance de la Estructura es solo la función. Los miembros de la estructura no se pueden acceder directamente en el programa. |
6. Operaciones en Uniones
Una unión también es similar a una estructura, puede realizar todas las operaciones como estructuras. Las operaciones en la unión se enumeran a continuación.
| | • Una variable de unión se puede asignar a otra variable de unión.
• Una variable de unión se puede pasar a una función como parámetro
• La dirección de la variable de unión se puede extraer utilizando el operador de dirección (&).
• Una función puede aceptar y devolver una unión o un puntero a una unión. |
| | / 82_union.c /
#include
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
union u_emp ue;
printf(“Ingrese el Número de Empleado : “); scanf(“%d”, &ue.eno);
printf(“Ingrese el Nombre del Empleado : “); scanf(“%s”, ue.name);
printf(“Ingrese el Salario del Empleado : “); scanf(“%f”, &ue.sal);
printf(“\n\nLos Detalles del Empleado son los siguientes…\n”);
printf(“%d %s %f “, ue.eno, ue.name, ue.sal);
return 0;
} |
| | ¿Cuál es la salida?
Solo ue.sal es correcto. ¿Qué pasa con el resto de las variables? |
En cualquier instante, solo una de las variables de unión tendrá un valor significativo. Solo ese miembro, que fue escrito por última vez, puede ser leído. En este punto, otras variables contendrán basura. Es responsabilidad del programador llevar un seguimiento de la variable activa (es decir, la variable que fue accedida por última vez).
Aquí está la mejor manera de aceptar y mostrar los registros de un empleado.
| | / 83_emp.c /
#include
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
union u_emp ue;
printf(“\nIngrese el Número de Empleado : “); scanf(“%d”, &ue.eno);
printf(“\n%d”, ue.eno);
printf(“\nIngrese el Nombre del Empleado : “); scanf(“%s”, ue.name);
printf(“\n%s”, ue.name);
printf(“\nIngrese el Salario del Empleado : “); scanf(“%f”, &ue.sal);
printf(“\n%f”,ue.sal);
return 0;
} |
7. Alcance de una Unión
El alcance de la unión es diferente al de la estructura. Una variable de estructura solo puede ser accedida por sus funciones. Mientras que una unión y sus miembros pueden ser accedidos por su función.
| | / 84_scope.c /
#include
int main()
{
union
{
int i;
char c;
float f;
};
i = 10; c = ‘a’; f = 4.5; / Miembros de la Unión /
printf(“El valor de c es : %c”, c);
return 0;
} |
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.