c++union用法

发布时间 2023-03-25 13:00:41作者: kongbursi
参考文章: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