以前没有使用过union这个类型,在最近做的项目中经常要将一个类型既看作是int进行处理,又要看成是double进行计算,在网上看到的例子就是使用union进行实现的。接下来浅谈一下union用法。
union一般定义如下:
union 联合名{
数据类型 成员名;
数据类型 成员名;
...
} 联合变量名;
联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量,也就是在同一个内存上,你既可以把联合当做A类型处理,也可以把联合当作B类型处理,这样定义 union A uA;下面举例说明。
当一个联合被说明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度。
#include<stdio.h>
union A
{
int i;
char pc[4];
};
int main()
{
union A uA;
uA.i = 0x000000aa;
uA.pc[1] = 0xff;
printf("%x/n",uA.i);
return 0;
}
输出结果:ffaa
从这个例子中我们可以看到,通过改变uA.pc的值,改变了uA.i的值,上面已经提到,i和pc占用的是同一块内存。
下面的例子用来测试union占用的内存大小
#include<iostream>
using namespace std;
union A
{
char pc[8];
int i;
};
int main()
{
cout<<sizeof(A)<<endl;
return 0;
}
输出结果:8
输出结果印证了上面提到的一句话“当一个联合被说明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度。”。