Unions en C explicadas: Definición, uso y comparación con estructuras
Unions en C explicadas
Aprenda a definir, crear y acceder a unions en C, y descubra por qué difieren de las estructuras en disposición de memoria y aplicación.
Una union es un tipo definido por el usuario en C que, a diferencia de un struct, puede contener solo uno de sus valores de miembro a la vez. Esto hace que las unions sean ideales para representaciones de datos eficientes en memoria y type-punning en programación de bajo nivel.
Definición de una union
Use la palabra clave union para declarar un nuevo tipo. Por ejemplo:
union Car {
char name[50];
int price;
};
El código anterior crea un tipo derivado union Car que puede almacenar entweder un string de 50 caracteres o un precio entero.
Creación de variables union
Definir una union no asigna memoria. Para usarla, declare variables de ese tipo:
union Car car1, car2, *car3;
Alternativamente, puede combinar la definición y la declaración de variables:
union Car {
char name[50];
int price;
} car1, car2, *car3;
En ambos ejemplos, car1 y car2 son instancias de union, mientras que car3 es un puntero a una union.
Acceso a miembros de union
Use el operador punto (.) para acceso directo y la flecha (->) para acceso por puntero:
car1.price– accede al campo price decar1.car3->priceo(*car3).price– accede a price vía puntero.
Unions vs. Estructuras
Mientras que los structs asignan espacio suficiente para todos los miembros, el tamaño de una union es igual al tamaño de su miembro más grande. Considere esta comparación:
#include <stdio.h>
union UnionJob {
char name[32];
float salary;
int workerNo;
} uJob;
struct StructJob {
char name[32];
float salary;
int workerNo;
} sJob;
int main() {
printf("tamaño de union = %zu bytes\n", sizeof(uJob));
printf("tamaño de estructura = %zu bytes", sizeof(sJob));
return 0;
}
Salida:
tamaño de union = 32 tamaño de estructura = 40
Aquí, el struct ocupa 40 bytes (32 + 4 + 4), mientras que la union ocupa solo 32 bytes – el tamaño de su miembro más grande, name[32]. Todos los miembros de la union comparten la misma región de memoria.
Ejemplo práctico: Sobrescritura de miembros
#include <stdio.h>
union Job {
float salary;
int workerNo;
} j;
int main() {
j.salary = 12.3;
j.workerNo = 100; // sobrescribe el valor anterior
printf("Salario = %.1f\n", j.salary);
printf("Número de trabajadores = %d", j.workerNo);
return 0;
}
Salida:
Salario = 0.0 Número de trabajadores = 100
Porque salary y workerNo comparten la misma memoria, escribir en uno borra el otro.
Para explorar casos de uso reales, lea ¿Por qué necesitamos unions en C?.
Lenguaje C
- Guía Experta para Dimensionar Correctamente tu Aire Acondicionado Comercial para un Rendimiento Óptimo
- Mercado de IA en fabricación alcanzará 4.800 millones de dólares para 2026, creciendo al 28,1% CAGR
- Dominando el Dimensionamiento de Válvulas Neumáticas: Guía Práctica
- Uniones de tubería (pipe unions): definición, uso y beneficios
- Cómo Elegir el Tamaño Correcto de Torno para Armería: Guía Completa
- Cómo Elegir el Tamaño Correcto del Depósito de Aire: Optimice Rendimiento y Eficiencia
- Dimensionamiento de compresores industriales: Guía experta para seleccionar la unidad correcta
- Guía Profesional para Cortar Barra de Aluminio de Forma Segura y Precisa
- Uniones en C explicadas: Gestión eficiente de memoria para múltiples tipos de datos
- Dominando Enums en Java: Guía completa de Enums y Clases Enum
- Constructores de Enum en Java explicados con ejemplo práctico