1.共用体变量的初始化
对于共用体变量,在定义的同时,可以初始化,但初始化只能对第一个成员初始化。如:
union data d1={10};
2.共用体变量中成员的引用
与结构体变量成员引用的方式相同,也使用“->”和“.”两种运算符来实现:
共用体变量名.成员名
共用体指针变量名->成员名
如:union data d1, *pd;
pd=&d1;
对d1成员的引用可以是:d1.i 或 pd->i
d1.ch 或 pd->ch
d1.f 或 pd->f
同类型的共用体变量之间可以互相赋值。如:
union data d1,d2={‘A’};
d1=d2;
例9.5 分析下面程序运行结果。
union data
{
int i;
char ch;
float f;
};
struct data2
{
int i;
char ch;
float f;
};
main ( )
{
union data ud;
struct data2 sd;
ud.i=10; ud.ch= 'A'; ud.f=20;
sd.i=10; sd.ch= 'A'; sd.f=20;
printf(" size of ud: %d, size of sd: %d\n ",sizeof ud, sizeof sd);
printf("ud.i: %d, ud.ch: %c, ud.f: %f\n ",ud.i,ud.ch,ud.f);
printf("sd.i: %d, sd.ch: %c, sd.f: %f\n ",sd.i,sd.ch,sd.f);
}
运行结果为:
size of ud: 4,size of sd: 7
ud.i: 0, ud.ch: ,ud.f: 20.000000
sd.i: 10,sd.ch: A,sd.f: 20.000000
从上面的运行结果可看出,对共用体变量成员的赋值,保存的是最后的赋值,前面对其他成员的赋值均被覆盖;由于结构体变量的每个成员拥有不同的存储单元,因而不会出现这种情况。
本章小结
结构体类型是一种复杂而灵活的构造数据类型,它可以将多个相互关联但类型不同的数据项作为一个整体进行处理。在定义结构体变量时,每一个成员都要分配空间存放各自的数据。共用体是另一种构造数据类型,但在定义共用体变量时,只按占用空间最大的成员来分配空间,在同一时刻只能存放一个数据成员的值。本章重点:
1. 结构体和共用体变量的定义都有三种形式,可以将类型的说明和变量的定义分开、结合或不给出类型名只定义变量。
2. 结构体变量的初始化与赋值。结构体变量的初始化与数组相似,通过初值列表实现对变量中的成员初始化;赋值与数组也相似,只能逐个成员赋值。
3. 结构体变量中的成员作为一个整体处理,成员的访问通过运算符“.”和“->”实现,其方式为:
结构体变量.成员名
结构体指针变量->成员名
4. 共用体成员的访问方式与结构体相同,但只能对第一个成员初始化。当为一个成员赋值时,其他成员的值就会被覆盖掉。