联合
1、联合与结构的异同
◆联合与结构都是由多个成员分量组成的一个整体;
◆联合与结构在定义、说明和使用(成员引用、指针)上十分
相似。
⏹结构:多个成员分量分别占用不同的存储空间构成一个整
体;成员分量之间是相互独立的,所进行的各种操作互不
影响。
⏹联合:多个成员分量共同占用同一存储空间;成员分量之
间是相互联系的,所进行的操作相互依赖。
联合
设有若干个人员的数据,其中有学生和教师。
学生的数据:姓名、号码、性别、职业、班级(int)。
学生的数据:姓名号码性别职业班级
教师的数据:姓名、号码、性别、职业、职务(char[])。
可以看出,学生和教师所包含的数据是不同的。现要求把它们放可以看出学生和教师所包含的数据是不同的现要求把它们放在同一表格中。显然对第5项可以用联合来处理(将班级和职务放在同一段内存中。
)
联合2、定义联合定义一般形式union  联合类型名
{数据类型
成员名1;数据类型
union是什么类型成员名2;……
数据类型
成员名n;
};
其中i 为关键字union u_type /*定义联合类型u_type */
h h 其中union为关键字。{char ch;int i;
long li;
}t t 说明联合类型的变量}cnvt,*pcnvt;/**/
联合
●3、联合类型占用内存情况
联合类型的变量占用内存空间的大小等于成员分量中最长的成员分量所占用内存的长度。
●对于联合变量cnvt ,其内存占用情况如图所示:变量
cnvt 成员ch 成员i 成员li
u type
union u_type {char ch;
int i;
long li;
}cnvt,*pcnvt;占用4个字节
联合
例:分析以下程序的运行结果。
main()
{union{/定义联合并说明联合变量mix/
/**/
long i;/*定义long型成员*/
int k;/*定义int型成员*/
char ch;/*定义char型成员*/
char s[4];/*定义char型数组成员*/
}mix;
mix.i=0x12345678;
mix i=0x12345678;
/*通过联合中的long型成员i为联合赋初值*/ printf(“mix.i=%lx\n”,mix.i);
i tf("i k%\"i k)
printf("mix.k=%x\n",mix.k);
printf("mix.ch=%x\n",mix.ii);
printf("mix.s[0]=%x\t mix.s[1]=%x\n",mix.s[0],mix.s[1]);
printf("mix.s[2]=%x\t mix.s[3]=%x\n",mix.s[2],mix.s[3]);
i f("i[2]%\i[3]%\"i[2]i[3])
}