本次课内容:共用体
其中:枚举和 typedef类型自阅。
教学目的:掌握相关概念,共用体的定义意义和引用方法。
重点:共用体的定义和引用。
难点:共用体的拆分引用。
预习,
结构体的定义,结构体成员和内存分配空间的关系。
结构体中,每个成员占有独立的存储空间。
一、共用体类型数据
1、共用体概念
共用体数据类型:指将不同的数据项存放于同一段内存单元的一种
构造数据类型。
定义形式,
(1) union 共用体名
{ 成员列表 };
(2) union 共用体名
{ 成员列表 } 变量列表;
(3) union
{成员列表 } 变量列表;
如,union exam
{ int a;
float b;
char c;
};
b
a c 1010
2、共用体引用
与结构体变量成员引用相似
如,x, a,x, b,x, c
注:共用体变量某一时刻只能存放其中一个成员值,即最后所赋的
值。
例,p267_7.14
main()
{
union exam
{ int a;
float b;
char c;
}x,y;
x.a=3;
y=x;
printf(“%d\n”,y.a);
}
b
a c 1010 00000011 00000000
3、应用
(1)一个数据域存放不同的对象 P268
struct
{long num;
char name[20];
char sex;
char job;
union
{ int class;
char froup[20]
}category
}person[10];
num
name[20]
sex job
class group[20]
(2)一段内存空间的内容拆分 P268_7.16
main()
{
union int _char
{ int i;
char ch[2];
}x;
x.i=24897;
printf(“i= %0 \n”,x.i );
printf(“ch0=%o,ch1=%o \n”,x.ch[0],x.ch[1] );
printf(“ch0=%c,ch1=%c \ \n”,x.ch[0],x.xh[1]);
}
结果,
i=60501
ch0=101,ch1=141
ch0=A,ch1=a
01000001
01100001
177736
177737
ch[0]
ch[1]
高字节 低字节
01000001 01100001
(3)作为函数参数
union int_char
{ int i;
char ch[2];
};
main()
{ union int_char y;
voie int_to_char (union int_char x);
y.i=24897;
int_to_char(y);
}
void int_to_char(union int_char x)
{printf(“ch0%o,ch1=%o \n”,x.ch[0],x.ch[1],);
printf(“ch0=%c,ch1=%c \n,,x.xh[0],x,xh[1] );
}
结果,
ch0=101,ch1=141
ch0=A,ch1=a
(4)用指针变量传递共用体地址
union int_char
{ int i;
char ch[2];
};
main()
{ union int_char y,*p;
void int_to_char(union int_char *p);
y.i=24897;
p=&y;
int_to_char(p);
}
void int_to_char(union it_char *pt)
{
printf(“ch0=%o,ch1=%o \n”,pt->ch[0],pt->ch[1]);
printf(“ch0=%c,ch1=%c \n”,pt->ch[0],pt->ch[1]);
}
小结,
1、共用体各成员共同使用所分配的存储空间,并且每
个成员都从第一个字节开始引用,每个成员的地址都相
同。
2、共用体类型和结构体类型定义方法相同,成员引用
方法相同。
3、共用体中各成员数据不能同时保存,最后存储的数
据是最终结果。
4、共用体在指针和函数方面的应用与结构体类似。
实验内容,
P274_7.8
要求,
1、独立完成,认真作好上机前准备;
2、及时完成实验报告。