另外一种情况,就是像上面举例的一样,共用体中的成员虽然不互斥,但是他们所存储的数据是一样的
联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值。
结构体,就是每一个成员都有自己的内存空间。因此,结构体总大小一般情况下等于各成员大小之和(先不考虑内存对齐)。
联合体又叫共用体,每一个成员都共享内存空间。因此,共用体大小等于成员中最大的那个大小。
结构体我就不说了,它用处很广,最常见的是用它保存一个记录。例如,学生管理程序中,一个学生的信息。
共用体,我看见很少人用,就不得不说说了,其实,共用体有很多妙用,用好了,会带来意想不到的效果。如果光用共用体,那么实用性会减少很多,通常和结构体一起使用。
如下题目:
输入一个long,查看它的高位数和低位数。
一般人可能会去移位,但是,如果是用结构体共用体,那么这题根本就是小儿科。 完全可以赋值,输出就OK了。解决这题可以设计这样的结构。
union uq1
{
long value;
struct
{
short lowbit;
short highbit;
} bit;
};
整个共用体还是4字节没有改变. 解决那题,就象这样:
uq1 u;
long v;
v=0x00FF00FF;
u.value=v;
printf("high=%d,low=%dn",u.bit.highbit,u.bit.lowbit);
这题的结果应该是:
high=255,low=255