5.4.2 结构和联合的区别
结构和联合在很多方面都很相似,比如数据结构形式、不同数据类型成员组成、声明方式、成员引用方式等,但结构和联合之间存在着本质上的区别。结构和联合变量的区别主要在于联合变量的成员占用同一个内存空间,而结构变量中的成员分别独占自己的内存空间,互相不干扰。结构和联合的数据存储情况如图5.9所示。
结构和联合的主要区别如下。
❑结构变量和联合变量都是由多个不同数据类型成员组成的,但是在任一时刻,结构的所有成员都存在,都占有内存空间;而联合变量中只存放了一个被选中的成员,任一时刻只有一个成员占用内存空间。
图 5.9 结构类型和联合类型的存储情况
❑结构变量的成员的赋值互不影响,可以单独对某个或某些成员赋值,或全部赋值;而对于联合变量的成员来说,一次只能对一个成员赋值,而且对其他成员再赋值,将会覆盖原来成员的值,这样先前赋的值就不存在了。
结构和联合使用的程序,示例如下。
include<stdio.h>//头文件
union//声明联合
{
int n;
struct//声明结构
{
char first;
char second;
}st;//声明结构变量st
}num;//声明联合变量num
void main()//主函数
{
num.n=0x6261;//赋值
printf(“%c%c\n”,num.st.first,num.st.second);//打印输出
num.st.first=‘A’;//赋值
num.st.second=‘B’;
printf(“0x%x\n”,num.n);//打印输出
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
b a
0x4142
在本例中,当给联合变量num成员n赋值后,其低字节和高字节也就是first和second的值;当给first和second赋字符后,这两个字符的ASCII码也将作为n的低字节和高字节。因为联合变量在某一时刻只有一个成员占用内存空间。