同类型的联盟成员

时间:2016-10-26 08:05:41

标签: c unions

假设我有一个联盟u,其中有两个成员ab具有相同类型(例如,int)。

union u{
    int a,b;
    char c;
};

如果我写信给a,按值传递给函数,函数从b读取,期望获得a值,是否会有任何问题,考虑到ab具有相同的类型?成员读取是否需要镜像成员写入?

1 个答案:

答案 0 :(得分:4)

是的,没关系。

标准(C11草案)说:

  

[...]如果一个联合包含多个共享一个公共首字母的结构   序列(见下文),如果union对象当前包含一个   这些结构,允许检查任何共同的初始部分   他们在完成工会类型的声明的任何地方   可见

这里两个整数可以被认为是(非常简单)共享相同初始序列的结构。

即使忽略了这一点,也有:

  

如果用于读取union对象内容的成员不一样   作为最后一个用于在对象中存储值的成员,相应的   值的对象表示的一部分被重新解释为   新类型中的对象表示

return "<b></b><a target='_blank' href="#" onClick=\"MyFunction('" + param1 +"', '" +param2+"')\">Wikipedia Entry</a>"; 重新解释为int非常安全。 :)