首页 > 其他 > 详细

union的读写问题

时间:2014-04-27 02:44:36      阅读:345      评论:0      收藏:0      [点我收藏+]

谈到union这个关键字,相信大家都不陌生,但是对于他的读写方式,原理可能还揣摩的不够,因为这涉及到一些底层的东西,下面我就来帮忙总结一下。

讲到union,就不得不想到struct,首先必须清楚的是,union声明和union变量定义方式都与结构是相似的,形式如下:

union 联合名

{

    数据类型  成员名;

    数据类型  成员名;

    ......

}联合变量名;

例如:

union test

{

    int mint;

    char mchar;

}m_test;

但是底层存储上,联合体和结构体却有天大的区别:结构体里面所有的成员都占用内存,所以结构体的大小等于其有成员大小之和(还要考虑字节对齐);而联合体里面所有的成员公用同一个内存位置,在不同时间保存不同的数据类型和不同长度的变量,但是该联合体的大小等于其成员变量中长度最大的大小。例如:
union test
{
 int minteg;
 char mchar;
}mtest;
void main()

 mtest.minteg = 2;
 mtest.mchar = ‘a‘;
 cout << mtest.minteg << " " << mtest.mchar

         << " " << sizeof(mtest) << endl;  
}

输出的结果为  97  a  4;因为最后赋值的是联合体里面的mchar变量,他将覆盖之前的给minteg所赋值,所以打印出来的minteg就是字符a的ASCII码值,而其大小为int的大小。所以对于联合的不同成员赋值, 将会对其它成员重写,  原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。



union的读写问题,布布扣,bubuko.com

union的读写问题

原文:http://blog.csdn.net/fayery/article/details/24553979

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!