首页 理论教育《C语言程序设计第2版》-共用体变量的应用

《C语言程序设计第2版》-共用体变量的应用

【摘要】:定义了共用体变量后,即可使用它。若需对共用体变量初始化,只能对它的第一个成员赋初始值。例如,对data类型共用体变量,有以下语句:x.a=100;strcpy;x.f=90.5;则只有x.f是有效的,x.a与x.n目前数据是无意义的,因为后面的赋值语句将前面共用体成员数据覆盖了。运行结果:101,102169612,0,02程序说明:共用体变量a共占用4个字节的存储空间,执行“strcpy;”语句后,a的成员字符数组c的3个字节被赋值为字符串“AB”,对应的各字符的ASCII码值分别存放在a的对应空间中。

定义了共用体变量后,即可使用它。若需对共用体变量初始化,只能对它的第一个成员赋初始值。例如:“union data x={“zhangsan”};”是正确的,而“union data x={“zhangsan”,12,40000,78,5};”是错误的。

虽然共用体数据可以在同一内存空间中存放多个不同类型的成员,但在某一时刻只能存放其中的一个成员,起作用的是最后存放的成员数据,其他成员不起作用。如果此时引用其他成员,则数据无意义。

例如,对data类型共用体变量,有以下语句:

x.a=100;

strcpy(x.n,“zhangsan”);

x.f=90.5;

则只有x.f是有效的,x.a与x.n目前数据是无意义的,因为后面的赋值语句将前面共用体成员数据覆盖了。

例8.6 分析下列程序的输出结果。(www.chuimin.cn)

运行结果:

101,102

16961

2,0,0

2

程序说明:共用体变量a共占用4个字节的存储空间,执行“strcpy(a.c,“AB”);”语句后,a的成员字符数组c的3个字节被赋值为字符串“AB”,对应的各字符的ASCII码值分别存放在a的对应空间中。因a的成员k与成员c所占用的内存单元是重叠的,所以将前3字节作为a.c。同样,执行程序的“a.k=2;”语句后,a所对应的存储区域中成员k被赋值为2,将刚才a中的数据覆盖了,因此执行下一语句后输出的是“2,0,0”。