自定义类型中的枚举与联合详解2❤

一:联合体

1》:联合体类型的声明与计算

像结构体一样,联合体也是由一个或多个成员构成,这些成员可以是不同类型的。但是编译器只为最大的成员分配足够的空间。联合体的特点是所有的成员共用同一块空间。所以联合体又叫做共用体。当然给联合体其中的一个成员赋值,其他成员的值随之改变。可以参考下面的图片,来找到结构体与联合体的区别。

就像结构体的声明要有struct,我们也需要创建联合体的名字。

同样与结构体一样,可以用两种方法命名联合体:1.声明标记的方法(union)  2.使用typedef来创造独一无二的类型名。这里与结构体相似可以试着写下来,这里就不过多讲述了。

2》:联合体的特点

相比于结构体而言,联合体可以节省大量空间。 

下面我们可以举个经典例子:

我们参与抽奖,抽奖的商品又三种:分别为图书、杯子和衬衫。每个商品都有库存量、价格、商品类型其他相关的其他信息。

图书:书名、作者、页数。

杯子:设计

衬衫:设计、可选颜色、可选尺寸。

如果我们没有耐心思考,就有可能直接使用结构体,例下

struct gift_list
{
    int stock_number ;  库存量
    double price;   价格                    这三个都是公共属性。
    int item_type;  商品的类型 
    
     char title[10]; 书名
     char auther[30];作者;      这是图书的特殊属性
     int pages;页数

     char design[10];设计
     int color;颜色
     int sizes;尺寸
}

成员里面的值将是图书,杯子,衬衫之一。虽然上述结构十分好用,但是它十分浪费空间,因为对于杯子而言它就不需要书名、作者、页数、颜色、尺寸。我们可以在结构体里面放置一个联合,可以减少结构所需要的空间。例下

struct gift_list
{
    int stock_number ;  库存量
    double price;   价格                    这三个都是公共属性。
    int item_type;  商品的类型 
   uoion{
struct{ 
     char title[10]; 书名
     char auther[30];作者;      这是图书的特殊属性
     int pages;页数
 }book;
struct{
     char design[10];设计
 } mug;
struct{
     char design[10];设计
     int color;颜色
     int sizes;尺寸
 }shift;
}items;
}

二:枚举

1》:枚举类型的声明

虽然枚举与结构体、联合体没什么共同之处,但它们的声明方法是很类似的。然而与前面两个不同的是它的枚举常量的名字不一样         它是enum

枚举类型的标记类似于结构与联合的标记,这里就不再详细介绍了。

2》:枚举类型的使用

枚举变量和常量作为整数来处理。默认情况下,编译器会把整数0,1,2......依次赋值给枚举中的常量。我们可以看下面的代码来理解

enum Sex
{
	MALE,
	FEMALE,
	SECRET    如果这里不赋值的话,就是将0,1,2分别赋值给MALE FEMALE SECRET        
};
但是我们也可以赋值给它们,也没有任何要求
enum Sex
{
	//这里列举枚举enum Sex的可能取值
	//这些可能取值是常量,也叫枚举常量
	MALE=5,
	FEMALE=8,
	SECRET=10
};

注意:虽然把枚举的值作为整数使用很方便,但是把整数用作枚举的值是非常危险的。

例如:当不小心把5存放到MALE中,这样4就不能代表任何其他的了。也就是MALE也仅仅是4的名字而已。

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鹏蓄力中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值