c++union用法
参考文章:c++中union的使用 union使用方法union即为联合,它是一种特殊的类。通过关键字union进行定义,一个union可以有多个数据成员。在任意时刻,联合中只能有一个数据成员可以有值。当给联合中某个成员赋值之后,该联合中的其它成员就变成未定义状态了。
赋值
在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。union主要是共享内存,分配内存以其最大的结构或对象为大小,即sizeof最大的。
union myun { struct { int x; int y; int z; }u; int k; }a; int main() { a.u.x =4; a.u.y =5; a.u.z =6; a.k = 0; printf("%d %d %d\n",a.u.x,a.u.y,a.u.z); return 0; }
//输出:0,5,6。
int类型4字节,因为u这个struct结构体里面都是int类型,所以对齐都不需要,这个结构体的大小就是4+4+4=12。所以myun这个联合体的大小就是max(sizeof(u), sizeof(int)) = 12
又因为myun这个联合体在任意时刻只能有一个成员有值,所以代码中为联合体中的u成员赋值的时候
[0,3]字节的值为4, [4,7]字节的值为5, [8,11]字节的值为6
后面又给myun联合体的k成员赋值的时候,因为k成员的大小只有4个字节,所以前四个字节[0,3]的值被覆盖为0
所以最后输出的结果为 0 5 6
指定成员长度
u.aa = 0xE07F;
//0xE07F的2进制形式
//1110000001111111