结论: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中变量公用内存,每次对不同变量赋值,会覆盖其他变量的值
理解C语言union的内存占用与赋值行为
union的大小由其内部最大变量决定,例如包含char、char数组和int的union大小为4个字节。在union中,不同变量共享同一块内存空间,因此对一个变量赋值会覆盖其他变量的值。在VS中使用内存监视器调试显示,对union成员的修改会动态改变内存中的数据。
406

被折叠的 条评论
为什么被折叠?



