使用a union
创建一个有时存储一种类型的变量,有时是另一种类型.
union { uint8_t u8; uint16_t u16; } *array_u; size_t nmemb = 6; array_u = calloc(nmemb, sizeof *array_u); assert(array_u); printf("array_u[0].u8 = %" PRIu8 "\n", array_u[0].u8); array_u[0].u16 = 1234; printf("array_u[0].u16 = %" PRIu16 "\n", array_u[0].u16); ...
这不会使用uint8_t u8
每个联合只有一个的所有空间.以下使用2 uint8_t
.
union { uint8_t u8[2]; uint16_t u16; } *array_u; printf("array_u[0].u8[0] = %" PRIu8 "\n", array_u[0].u8[0]); array_u[0].u16 = 1234; printf("array_u[0].u16 = %" PRIu16 "\n", array_u[0].u16);
OTOH如果代码需要覆盖整个固定长度的数组
union { uint8_t u8[12]; uint16_t u16[6]; } *array_u; array_u = calloc(1, sizeof *array_u); assert(array_u); printf("array_u->u8[0] = %" PRIu8 "\n", array_u->u8[0]); array_u->u16[0] = 1234; printf("array_u->u16[0] = %" PRIu16 "\n", array_u->u16[0]); ...