5.2共用体

2019-07-06  本文已影响0人  拿着苹果学猪叫

共用体也称联合,可以看出一种特殊的结构。和结构一样,共用体也可以包括多种数据类型,但在共用体中,各种数据类型在内存占据同一地址,换句话说,在某个确定时刻,共用体只能表示一种数据类型。

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型和字符数组),使用结构也不行,因为
年级和部门只能取其一,两者之间不是并列关系,共用体是最好的方法。

上一篇 下一篇

猜你喜欢

热点阅读