English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderá sobre los tipos de datos comunes en el lenguaje de programación C. Más específicamente, cómo crear tipos de datos comunes, acceder a sus miembros y comprender la diferencia entre los tipos de datos comunes y las estructuras. Los tipos de datos comunes también se conocen como 'uniones' y se clasifican junto con las estructuras en el tipo de datos estructurado del lenguaje de programación C.
Un tipo de datos comunes es un tipo de datos especial que permite almacenar diferentes tipos de datos en la misma posición de memoria. Puede definir un tipo de datos comunes con múltiples miembros, pero en cualquier momento solo puede haber un miembro con un valor. Los tipos de datos comunes proporcionan una manera efectiva de usar la misma posición de memoria.
El tipo de datos comunes también es un tipo de datos definido por el usuario, similar a 'union' en C.structcon la diferencia de una palabra clave. La estructura asigna suficiente espacio para almacenar todos sus miembros, mientras que el tipo de datos comunes asigna espacio solo para el miembro más grande.
Usamos la palabra clave 'union' para definir un tipo de datos comunes. Este es un ejemplo:
union car { char name[50]; int price; };
El código anterior define el tipo derivado de unión car.
Después de definir la unión, se crea un tipo de usuario definido. Pero, no se asigna memoria. Para asignar memoria al tipo de unión dado y usarlo, necesitamos crear una variable.
Esta es la manera de crear una variable de unión.
union car { char name[50]; int price; }; int main() { union car car1, car2, *car3; return 0; }
Otra manera de crear una variable de unión es:
union car { char name[50]; int price; }1, car2, *car3;
En ambos casos, se crea una variable de tipo unión car1、car2y el puntero de unión car3。
Usamos el operador . para acceder a los miembros de la unión. Para acceder a las variables de puntero, también usamos-> operador。
En el ejemplo anterior,
Para acceder a car1el precio (price) del coche, utilice car1.price。
Para acceder a car3el precio (price) del coche, se puede usar (* car3).price o car3-> price。
Vamos a explicar con un ejemplo la diferencia entre la unión y la estructura:
#include <stdio.h> union unionJob { //Definir una unión char name[32]; float salary; int workerNo; } uJob; struct structJob { char name[32]; float salary; int workerNo; } sJob; int main() { printf("union 的大小 = %d bytes", sizeof(uJob)); printf("\nstruct 的大小 = %d bytes", sizeof(sJob)); return 0; }
Resultado de la salida
el tamaño de union = 32 bytes el tamaño de structure = 40 bytes
¿Por qué hay una diferencia en el tamaño entre las variables de unión y las estructuras?
en este caso, el tamaño de sJob es40 bytes, porque
name[32]tamaño es32un byte
el tamaño de salary es4un byte
el tamaño de workerNo es4un byte
pero, el tamaño de uJob es32un byte. Esto se debe a que el tamaño de la variable de unión siempre será el tamaño del elemento más grande. En el ejemplo anterior, el elemento más grande es (name[32])tamaño es32un byte.
Al usar la unión, todos los miembros compartenla misma memoria。
#include <stdio.h> union Job { float salary; int workerNo; } j; int main() { j.salary = 12.3; //cuando j.workerNo se asigna // j.salary ya no se conservará12.3 j.workerNo = 100; printf("Salario = %.1f\n", j.salary); printf("Número de trabajadores = %d", j.workerNo); return 0; }
Resultado de la salida
Salario = 0.0 Número de trabajadores = 100