Unión y estructura en lenguaje C, ¿cuándo es mejor usar unión que estructura?
Para una variable de tipo unión, todas las variables miembro comparten una parte de la memoria. El tamaño de la memoria está determinado por la longitud más grande entre estas variables miembro. La memoria asignada por la unión es continua.
Entonces ¿por qué se inventó la unión? Esto se debe a las características de la unión, porque aunque las variables miembro en la estructura tienen memoria independiente, la estructura no puede garantizar que la memoria asignada sea continua.
Por ejemplo: el registro ax de la CPU se divide en dos partes, ah y al. Ahora que queremos asignarles valores, podemos usar la unión:
union _ax_register. {
int i; // 4Bytes, la unión asignará una memoria continua de 4 bytes en consecuencia
unsigned short ah // 2 Bytes
unsigned short al; ; // 2 Bytes
} ax_register;
Ahora, al asignar un valor a ax_register.i, los 16 bits superiores se asignarán a ah y los 16 bits inferiores se asignarán a ah. asignado a al. ¿No es muy conveniente?
Para otro ejemplo, si usamos union para una dirección IP, podemos asignarle directamente un valor int y asignar valores a los cuatro segmentos de la IP al mismo tiempo. una estructura, causará muchos problemas, de la siguiente manera:
union _ip_address {
int i; // spaceholder
unsigned char ip_first_num
p>unsigned char ip_segundo_num
unsigned char ip_third_num;
unsigned char ip_fourth_num
} ip_address; De esta manera, asignar un valor a ip_address.i lo cambiará automáticamente a 8 bits 8 bits Se asignan cuatro campos de IP. ¿No es muy conveniente? Lo que es más conveniente es que si desea comparar los tamaños de dos direcciones IP, simplemente compare este valor int y estará bien.