single
Uniones
Desliza para mostrar el menú
Una unión es un tipo de dato definido por el usuario en C, similar a una estructura. La principal diferencia es que todos sus miembros comparten la misma ubicación de memoria. En un momento dado, solo un miembro puede almacenar un valor.
Las uniones se usan con poca frecuencia, pero son útiles cuando se necesita una variable que pueda contener diferentes tipos de datos en distintos momentos y ahorrar memoria.
Los datos se encuentran en la misma área de memoria para todos los miembros de la unión. Esto significa que todos los miembros de la unión comparten la misma dirección de memoria, y el tamaño de la unión es igual al tamaño de su miembro más grande.
El uso principal de una unión es la superposición de diferentes tipos de datos en una misma área de memoria, es decir, la representación de una sola área de memoria como diferentes tipos de datos.
Dado que en la unión los campos están en la misma celda de memoria, es posible procesar los mismos datos de diferentes maneras:
main.c
12345678910111213141516#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }
En el ejemplo, las variables data.a y data.b comparten la misma memoria. Se asignó el valor 77 a a, pero se pueden interpretar los mismos bytes como un carácter en b.
Alineación en las uniones
Al igual que las estructuras, las uniones también utilizan alineación y relleno. El compilador puede agregar bytes adicionales para que cada miembro comience en el límite de memoria adecuado.
main.c
12345678910111213#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }
Una unión solo puede almacenar un valor a la vez, y su tamaño es igual al de su miembro más grande. En el ejemplo con int a (4 bytes), double b (8 bytes) y char c[20], el tamaño mínimo de la unión es de 20 bytes. Sin embargo, el compilador puede agregar bytes adicionales para la alineación, de modo que double o int comiencen en el límite de memoria adecuado. Como resultado, sizeof(union Data) puede ser mayor que 20, por ejemplo, 24 bytes.
Desliza para comenzar a programar
La unión Data almacena cada valor como un int y permite acceder al mismo valor como un char.
La función acepta dos parámetros: un arreglo de enteros (values) y su longitud (n).
- Uso de una
union Datacon dos miembros:int aychar b. - En un ciclo
for, iteración sobre los elementos del arreglo desde0hastan. - Asignación del elemento actual del arreglo al miembro
intde la unión (data.a). - Impresión del valor entero
data.ay la representación de carácterdata.b.
Example
{65, 66, 67, 68, 69} =>
Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E
Solución
¡Gracias por tus comentarios!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla