Uniones C (con ejemplos)

En este tutorial, aprenderá sobre las uniones en la programación C. Más específicamente, cómo crear sindicatos, acceder a sus miembros y conocer las diferencias entre sindicatos y estructuras.

Una unión es un tipo definido por el usuario similar a las estructuras en C excepto por una diferencia clave. Las estructuras asignan suficiente espacio para almacenar todos sus miembros, mientras que los sindicatos asignan el espacio para almacenar solo el miembro más grande.

¿Cómo definir un sindicato?

Usamos la unionpalabra clave para definir uniones. He aquí un ejemplo:

 union car ( char name(50); int price; ); 

El código anterior define un tipo derivado union car.

Crea variables de unión

Cuando se define una unión, crea un tipo definido por el usuario. Sin embargo, no se asigna memoria. Para asignar memoria para un tipo de unión dado y trabajar con él, necesitamos crear variables.

Así es como creamos las variables de unión.

 union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; ) 

Otra forma de crear variables de unión es:

 union car ( char name(50); int price; ) car1, car2, *car3; 

En ambos casos, se crean las variables de unión car1, car2 y un puntero de unión car3 de union cartipo.

Acceder a miembros de un sindicato

Usamos el .operador para acceder a los miembros de un sindicato. Para acceder a las variables de puntero, usamos también el ->operador.

En el ejemplo anterior,

  • Para acceder al precio de car1, car1.pricese utiliza.
  • A precio de acceso usando car3, ya sea (*car3).priceo car3->pricepueda ser utilizado.

Diferencia entre sindicatos y estructuras

Tomemos un ejemplo para demostrar la diferencia entre sindicatos y estructuras:

 #include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; ) 

Salida

 tamaño de unión = 32 tamaño de estructura = 40 

¿Por qué esta diferencia en el tamaño de la unión y las variables de estructura?

Aquí, el tamaño de sJob es de 40 bytes porque

  • el tamaño de name(32)es 32 bytes
  • el tamaño de salaryes de 4 bytes
  • el tamaño de workerNoes de 4 bytes

Sin embargo, el tamaño de uJob es de 32 bytes. Es porque el tamaño de una variable de unión siempre será el tamaño de su elemento más grande. En el ejemplo anterior, el tamaño de su elemento más grande, ( name(32)), es de 32 bytes.

Con un sindicato, todos los miembros comparten la misma memoria .

Ejemplo: Acceso a miembros de la unión

 #include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )

Salida

 Salario = 0.0 Número de trabajadores = 100 

Para saber dónde se utilizan los sindicatos, visite ¿Por qué necesitamos sindicatos C?

Articulos interesantes...