结论:union大小等同与内部最大变量大小,union内部变量占用共同空间
union大小
这样一个union定义:
union MyUnion
{
char a;
char b[2];
int c;
};
大小为其内部最大变量大小,即c,占4个字节
union中变量共用内存
对于上述union的内部变量进行赋值:
MyUnion un;
un.c = 4;
un.b[0] = '2'-'0'; //这样内存中便显示2
un.b[1] = '3'-'0'; //同理3
un.a = '1'-'0';
设置断点,打开内存监视器(我用的是vs,打开方法见文章vs中调试程序查看变量在内存中的方法)
逐步运行,内存变化如下:
刚开始
对c进行赋值
对b进行赋值
对c进行赋值
总结
- union大小为其内存中最大变量的大小
- union中变量公用内存,每次对不同变量赋值,会覆盖其他变量的值