Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Uniones | Comprensión de Structs y Memoria
Dominio de las Estructuras en C

bookUniones

Note
Definición

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 cualquier momento, solo un miembro puede almacenar un valor.

Las uniones se utilizan con poca frecuencia, pero son útiles cuando se requiere una variable que pueda contener diferentes tipos de datos en distintos momentos y ahorrar memoria.

Los datos se ubican 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 imposición de diferentes tipos de datos sobre una misma área de memoria común, es decir, la representación de una sola área de memoria como distintos tipos de datos.

Dado que en la unión los campos comparten la misma celda de memoria, es posible procesar los mismos datos de diferentes maneras:

main.c

main.c

copy
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. Asignamos el valor 77 a a, pero podemos interpretar los mismos bytes como un carácter en b.

Alineación en 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

main.c

copy
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 puede almacenar solo un valor a la vez, y su tamaño es igual al tamaño 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.

Tarea

Swipe to start coding

La unión Data almacena cada valor como un int y permite acceder al mismo valor como un char. La función debe iterar sobre el arreglo e imprimir cada valor tanto como un entero como su carácter ASCII correspondiente.

La función acepta dos parámetros: un arreglo de enteros (values) y su longitud (n).

  1. Utilizar una union Data con dos miembros: int a y char b.
  2. En un ciclo for, iterar sobre los elementos del arreglo desde 0 hasta n.
  3. Asignar el elemento actual del arreglo al miembro entero de la unión (int).
  4. Imprimir el valor data.a (data.a) y la representación de carácter data.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

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3
single

single

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

close

bookUniones

Desliza para mostrar el menú

Note
Definición

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 cualquier momento, solo un miembro puede almacenar un valor.

Las uniones se utilizan con poca frecuencia, pero son útiles cuando se requiere una variable que pueda contener diferentes tipos de datos en distintos momentos y ahorrar memoria.

Los datos se ubican 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 imposición de diferentes tipos de datos sobre una misma área de memoria común, es decir, la representación de una sola área de memoria como distintos tipos de datos.

Dado que en la unión los campos comparten la misma celda de memoria, es posible procesar los mismos datos de diferentes maneras:

main.c

main.c

copy
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. Asignamos el valor 77 a a, pero podemos interpretar los mismos bytes como un carácter en b.

Alineación en 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

main.c

copy
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 puede almacenar solo un valor a la vez, y su tamaño es igual al tamaño 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.

Tarea

Swipe to start coding

La unión Data almacena cada valor como un int y permite acceder al mismo valor como un char. La función debe iterar sobre el arreglo e imprimir cada valor tanto como un entero como su carácter ASCII correspondiente.

La función acepta dos parámetros: un arreglo de enteros (values) y su longitud (n).

  1. Utilizar una union Data con dos miembros: int a y char b.
  2. En un ciclo for, iterar sobre los elementos del arreglo desde 0 hasta n.
  3. Asignar el elemento actual del arreglo al miembro entero de la unión (int).
  4. Imprimir el valor data.a (data.a) y la representación de carácter data.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

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3
single

single

some-alt