假设我有一个联盟u,其中有两个成员a
和b
具有相同类型(例如,int)。
union u{
int a,b;
char c;
};
如果我写信给a
,按值传递给函数,函数从b
读取,期望获得a
值,是否会有任何问题,考虑到a
和b
具有相同的类型?成员读取是否需要镜像成员写入?
答案 0 :(得分:4)
是的,没关系。
标准(C11草案)说:
[...]如果一个联合包含多个共享一个公共首字母的结构 序列(见下文),如果union对象当前包含一个 这些结构,允许检查任何共同的初始部分 他们在完成工会类型的声明的任何地方 可见
这里两个整数可以被认为是(非常简单)共享相同初始序列的结构。
即使忽略了这一点,也有:
如果用于读取union对象内容的成员不一样 作为最后一个用于在对象中存储值的成员,相应的 值的对象表示的一部分被重新解释为 新类型中的对象表示
将return "<b></b><a target='_blank' href="#" onClick=\"MyFunction('" + param1 +"', '" +param2+"')\">Wikipedia Entry</a>";
重新解释为int
非常安全。 :)