任务描述
共用体是使几个类型相同或不同的成员变量占用同一段内存的结构。它与结构体类似,都属于构造数据类型,都由若干类型可以互不相同的成员组成。但不同的是,结构体变量的各个成员拥有自己独立的存储单元,而共用体变量的各个成员“共用”一段内存,该内存段允许各成员在不同的时间分别起作用。
说明:
共用体各成员变量的存储空间是相互覆盖的,一个成员变量值的改变会影响其他成员变量。
共用体变量所占的存储空间不是多个成员变量所占空间的和,而是所有成员中存储空间最大值。
知识学习
(1)共用体的定义
格式:
功能:
定义一种共用体类型与若干该类型的共用体变量。
例如:
说明:
共用体类型的声明与共用体变量的定义可以分开,也可以直接定义共用体变量。如下:
注意:
共用体可以出现在结构体类型的定义中,反之也可。
(2)共用体变量的引用
格式:共用体变量名.成员名
功能:引用共用体变量中指定名称的成员变量。
例如:
说明:
①共用体变量的地址和其各成员的地址相同。
②每改变一个成员的值,共用体中其他成员的值都可能改变,因此,共用体变量中起作用的是最后一次改写的成员。
③共用体变量不能整体赋值,也不能初始化。以下两条语句均不正确:
union udata data1,data2 ={'A',5,2.3};(www.xing528.com)
data2 ='B';
④共用体变量不能作函数参数或函数返回值,但可以使用指向共用体变量的指针。
例8.17 某门课程,部分学生选修,部分学生必修。对选修学生按等级制打分,分A、B、C、D、E 五级,对必修课学生按百分制打分。然后进行输入输出。
说明:
可以在主函数内定义结构体和共用体,此时两者只在主函数内部起作用。
任务总结
共用体总是存储最后一个数据的值,因为在共用体中每一瞬间只能存放其中一个成员,而不是同时存放几个。因为在每一个存储的瞬间,存储单元只能有唯一的内容,在共用体变量中只能存一个值,所以可以说是共用体存在内存覆盖,不管有多少个数据,只会存放最后一个元素的值,原有的值会被取代。
由于共用体的第一个性质,所以对共用体进行初始化的时候,在初始化表中只能有一个变量,下面举例:
}a={1,'a',1.5}; / /错了,占用同一段存储单元
union Data a={16}; / /正确,对第一个成员进行初始化
union Data a={.ch='j'}; / /可以对指定的成员进行初始化
不能对共用体进行赋值,也不能通过引用变量名来得到一个值
举两个错误的例子。
①a=1,这样不知道给哪一个赋值,所以错了;
②m=a,不能通过引用变量名得到一个值赋给整型变量m。
但是,可以对两个同类型的共用体进行赋值。
比如a=b;这样是完全可以的,这一点又和结构体有异曲同工之妙。
特别注意:
只有先定义了共用体变量才可以引用它,但是,不能引用共用体变量,只能引用共用体变量中的成员:
a.i (引用共用体变量中的整型变量i)
a.ch(引用共用体变量中的字符变量ch)
a.f(引用共用体变量中的实型变量f)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。