设为首页收藏本站language 语言切换
查看: 1176|回复: 3
收起左侧

[分享] C语言:共用体-阅后即焚的变量

[复制链接]
发表于 2022-8-24 09:40:52 | 显示全部楼层 |阅读模式
共用体-阅后即焚的变量

union共用体即它内部的成员,存储在同一个地址空间中。
1.jpg 2.jpg 3.jpg 4.jpg
通过图示,比较生动的让大家看到,不论来了多少个成员,所有成员只能存储在同一个地址空间中。那么地址空间的大小具体应该是多大呢?

地址空间的大小取决于最大的数据类型,最大的数据类型有多大,共用体数据的大小就有多少:
5.jpg 6.jpg

从图示代码中,可以明确的看到,共用体变量的大小,取决于共用体成员中最大的数据类型,即当最大的是int型整型变量的时候,共用体大小就为4字节,当为double类型的时候,共用体大小就变成了8字节。

那么接下来再带大家看一下,我们今天的重点,也是对于新手而言比较容易入坑的点,小李将这个特点称为-“阅后即焚的变量”。
7.jpg
从代码中,我们可以看到,当我们对公用体的第二个成员赋值之后,再看共用体的第一个成员值,也被改变了。这就是对于共用体的成员都存在同一个地址空间的体现。一个char型变量有8位,当我们赋值之后,系统就会在共用体空间的低八位进行存储。从而之前存储的内容就被覆盖了。
8.jpg
总结,共用体的成员全部存储在一个空间中,所以对于成员的使用,必须要即配即用,阅后即焚,在一个成员赋值之后,其它的成员的值都会由于公用地址空间的原因受到影响

发表于 2022-10-12 18:11:59 | 显示全部楼层
很生活化實際的應用帶入講解
感謝!
地板 2022-10-12 18:11:59 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-1 09:06 , Processed in 0.099858 second(s), 12 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表