共用体-阅后即焚的变量

union共用体即它内部的成员,存储在同一个地址空间中。
get?code=M2U0OTZiMDkyM2U1MzliMTM5OTYzNjA1NWI5Y2U5MmMsMTY3Nzk0NjU1ODQ2Nw==.jpg
get?code=ZjAzZjhmNDY5Zjg5NTM4NTA3MmNkNDk5ODM1OTEyZjgsMTY3Nzk0NjU1ODQ2Nw==.jpg
get?code=MGI5ZDM1MjMzNjEwZjQyNjUzZTA5OTU1MDlmZmY3NDIsMTY3Nzk0NjU1ODQ2Nw==.jpg
get?code=ZTA1N2Q4OGEwNWEzN2Y2NjE5YmMxNzUzN2M5NmI5ODEsMTY3Nzk0NjU1ODQ2Nw==.jpg


通过图示,比较生动的让大家看到,不论来了多少个成员,所有成员只能存储在同一个地址空间中。那么地址空间的大小具体应该是多大呢?

地址空间的大小取决于最大的数据类型,最大的数据类型有多大,共用体数据的大小就有多少:
get?code=OGMyMzg2OTJjMDAzNGY5YzczY2RjNjhlZGE4NGU2MGYsMTY3Nzk0NjU1ODQ2Nw==.jpg
get?code=YjViMjI3ZGJlMmE5ODYxYmU2Mjg4NWRjOTdhNzFhNDEsMTY3Nzk0NjU1ODQ2Nw==.jpg



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

那么接下来再带大家看一下,我们今天的重点,也是对于新手而言比较容易入坑的点,小李将这个特点称为-“阅后即焚的变量”。
get?code=MTZlMTZjZDc5M2ViYTEyODRhODczYjRhN2NhMzFhOTUsMTY3Nzk0NjU1ODQ2Nw==.jpg


从代码中,我们可以看到,当我们对公用体的第二个成员赋值之后,再看共用体的第一个成员值,也被改变了。这就是对于共用体的成员都存在同一个地址空间的体现。一个char型变量有8位,当我们赋值之后,系统就会在共用体空间的低八位进行存储。从而之前存储的内容就被覆盖了。
get?code=ZWM1NDI4MjI4MzhjZjM3ZGNmMGE4NDlkODBhZTA4NzYsMTY3Nzk0NjU1ODQ2Nw==.jpg


总结,共用体的成员全部存储在一个空间中,所以对于成员的使用,必须要即配即用,阅后即焚,在一个成员赋值之后,其它的成员的值都会由于公用地址空间的原因受到影响