IT民工
分类: LINUX
2009-09-07 13:08:58
C语言的联合(union)类型:
union 联合名{
数据类型 成员名;
数据类型 成员名;
...
} 联合变量名;
联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量。
测试程序代码:
运行结果图:
有些人说是010a。这是和数据类型的内存分配有关。我上面的测试是在VC下的测试。
同样的也有一段网上流传的程序,大家看看结果。并分析一下。
int main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c\n", number.half.first, number.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x\n", number.i);
return (1);
}
答案: AB (0x41对应'A',是低位;Ox42对应'B',是高位) 6261 (number.i和number.half共用一块地址空间)。为什么这里的前面没有cccc呢?大家看看。因为赋过值。