【发布时间】:2018-04-21 16:08:39
【问题描述】:
如果你有:
typedef union value {
int i;
float f;
} VALUE;
VALUE a, b;
如果你知道a的类型,你应该知道吗
b.i = a.i;
b.f = a.f;
或
if(a_type == INT)
b.i = a.i;
if(a_type == FLOAT)
b.f = a.f;
【问题讨论】:
-
a是什么?b是什么?a_type是什么?请出示minimal reproducible example。 -
不行,只有传入另一个参数才能知道要填什么。
-
一般来说,如果成员
i是a的活跃成员,您的代码就会出错。如果你真的不知道哪个成员是活跃的,你会遇到问题,但你仍然可以使用memcpy像memcpy(&b, &a, sizeof b); -
@mpez0: 所有位模式都对整数有效 不是 C 标准所保证的。在诸如较旧的 Cray 计算机之类的病态架构上,这种方法会失败。只需使用
memcpy(&b, &a, sizeof b);
标签: c language-lawyer unions