共用体也称联合,可以看出一种特殊的结构。和结构一样,共用体也可以包括多种数据类型,但在共用体中,各种数据类型在内存占据同一地址,换句话说,在某个确定时刻,共用体只能表示一种数据类型。
5.2.1共用体的定义
union 共用体名称(或称标识)
{
存储数据列表(或成员变量列表)
};
结束不要忘记在花括号后加分号“;”
union computer
{
char branf[10];
float price;
};
共用体的定义与结构几乎完全一样。
5.2.2共用体和结构的不同
#include<iostream>
using namespace std;
struct comstruct//定义结构comstruct
{
char brand[20];//字符数组brand,表示品牌
float price;//float型,表示价格
};
union comUnion//定义共用体comUnion
{
char brand[20];
float price;
};
int main()
{
union comUnion com1;//声明一共用体com1
comstruct com2;//声明一结构变量com2
//共用体变量的成员占据相同的地址
cout << "共用体com1.brand地址:" << &com1.brand << endl;
cout << "共用体com1.price地址:" << &com1.price << endl;
//结构体变量成员占据不相同的地址
cout << "共用体com2.brand地址:" << &com2.brand << endl;
cout << "共用体com2.price地址:" << &com2.price << endl;
return 0;
}
共用体com1.brand地址:00F6FBA4
共用体com1.price地址:00F6FBA4
共用体com2.brand地址:00F6FB84
共用体com2.price地址:00F6FB98
5.2.3共用体变量的声明和初始化
在定义了一个共用体后,同样可以像声明一个int型变量一样声明一个共用体变量
union 共用体名共用体变量;
声明一个共用体的同时,可以完成其初始化,与结构体不同是,只能对共用体变量列表的一个变量进行初始化,确切的说,是对列表中第一个变量进行初始化,
comUnion com1={"Acer"};
但是如果用"comUnion com1={7000};"对com1进行初始化,编译器则会发生警告,比较两种写法中第一个变量(字符数组brand),
- 改用共用体中变量列表的顺序,初始化的方式将有所不同。
与结构体类似,可以吧共用体定义,共用体变量声明及初始化放一起,
union computer
{
char brand[20];
float price;
}com1={"Dell"};
C++允许使用匿名共用体,我们可以定义一个没有类型 名称的共用体
一定要至少声明一个共用体变量
union
{
char brand[20];
float price;
}com1;
5.2.4
为了方便管理,某学校决定为学生和老师制作统一的卡片,其中一项内容是所在单独单位,对学生来说,代表其所在年级(int型),但对老师来说,代表学校某个部门(字符数组)这样的数据应如何组织呢?使用数组不行,因为数组必须存储同一类型的数据(int型和字符数组),使用结构也不行,因为
年级和部门只能取其一,两者之间不是并列关系,共用体是最好的方法。








网友评论