如果有多种可能的选择,是否可以确定联合包含哪种类型?
typedef union
{
char charArr[SIZE];
int intVal;
float floatVal;
} VALUE_TYPE;
VALUE_TYPE number;
number.intVal = 8;
Run Code Online (Sandbox Code Playgroud)
如果值是从其他地方设置的,如何知道联合包含的内容?
你不能开箱即用这种东西是对的.
解决此问题的常用方法是可以在联合中添加类型.例如,它可能是:
enum { charArr_type, float_type, int_type } VALUE_TYPE;
typedef union
{
char charArr[SIZE];
int intVal;
float floatVal;
} VALUE;
struct my_value {
VALUE val,
VALUE_TYPE val_type
}
Run Code Online (Sandbox Code Playgroud)
之后,您只需在分配结构时更新类型:
my_value number;
number.val.intVal = 8;
number.val.val_type = is_int
Run Code Online (Sandbox Code Playgroud)
当你需要一个能够存储几乎任何东西的普通类型时,这是一种常见的现代模式.
例如,您可以在PHP源代码中随处找到它.这是它们在同一对象中存储不同值类型的方式.有关详细信息,请参阅此页面.