笔者编码经验比较少,union只知概念,几乎没用过。昨日看到在UNP上一个示例程序如下
判断系统使用大端还是小端
对un.s理解了半天,才明白它是以s的类型填充,又以c的类型访问。以前仅限于“需要存什么类型就存什么”的简单理解。而后看了一篇博文和某一回复,更是有所启发。地址:http://www.cnblogs.com/liuyazhou/archive/2010/03/30/1700823.html和3#的回复,下面把它转载过来了,留档备用。
很变态的一个union
朋友给我发的一个题,是关于union的。我知道union共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且只能储存其中一个成员变量的值。但这个程序的结果还是让我破感意外。现在也没有琢磨出为什么会是这样。
程序如下:
#include <iostream> using namespace std; struct byte { unsigned int a1:1; int a2:1; int a3:1; int a4:1; int a5:1; int a6:1; int a7:1; int a8:1; }; union b { char c; struct byte bit; }union_a; int main(int argc, char *argv[]) { union_a.c = 'A'; cout <<(union_a.bit.a7 + union_a.bit.a1) << endl; return 0; }
运行结果为0.
感到不解,于是输出了a1-a8的所有值。其中a1=1,a7=-1,其他均为0.
有高手可以分析一下这是怎么回事吗?
3#回复
本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/articles/2445253.html,如需转载请自行联系原作者