我对工会有疑问。假设有一个定义为
的联合union emp{
float f;
int i;
};
有没有办法确定使用哪个联合字段。我遇到过一种情况,我必须在使用float字段时打印float,如果使用int字段则打印int。函数可能类似于
void print(union u){
// if float field is initialized
printf("float field = %f\n",u.f);
// if int field is initialized
printf("int field = %d\n",u.i);
}
提前致谢。
答案 0 :(得分:6)
你不能只用union
来判断;通常将其包装在struct
中,其中包含某种标记值。
struct val {
enum { EMP_INT, EMP_FLOAT } tag;
union emp {
int i;
float f;
} emp;
};
答案 1 :(得分:1)
实际上,根据您访问内存的字段,将被解释为float
或int
。
您最好的选择是将union作为结构的一部分,并保留一个标志,指示使用哪个字段。
答案 2 :(得分:1)
您不能,信息不会存储在运行时的任何地方。
您可以执行以下操作:
struct emp {
enum storedValue type;
union {
float f;
int i;
}
};
手动存储类型。然后,枚举的值为floatval
和intval
或类似。
您可以使用类似isFloat
的布尔值来代替枚举。