联合和枚举

联合体类型的声明

联合体(Union)是一种特殊的数据类型,它允许在同一内存位置存储不同类型的数据。与结构体不同的是,联合体的所有成员共享同一块内存空间,因此联合体的大小取决于它最大的成员的大小。

所以联合体也叫:共用体
例如,下面是一个简单的联合体声明示例:
union MyUnion {
    int intValue;
    float floatValue;
};

在这个例子中,MyUnion是一个联合体类型,它有两个成员intValuefloatValue,分别是整数类型和浮点数类型。

给联合体其中⼀个成员赋值,其他成员的值也跟着变化
#include <stdio.h>
//联合类型的声明
union Un
{
 char c;
 int i;
};
int main()
{
 //联合变量的定义
 union Un un = {0};
 //计算连个变量的⼤⼩
 printf("%d\n", sizeof(un));
return 0;
}
代码1输出的三个地址一模一样,代码2的输出,我们发现将i的第4个字节的内容修改为55了。
我们仔细分析就可以画出,un的内存布局图。

相同成员的结构体和联合体对比

struct S
{
 char c;
 int i;
};
struct S s = {0}
union Un
{
 char c;
 int i;
};
union Un un = {0};

联合体大小的计算

联合体的大小取决于它最大的成员的大小,因为所有成员共享同一块内存空间。具体计算方式如下:

  1. 找出联合体中所有成员中的最大成员的大小。
  2. 联合体的大小即为最大成员的大小。
我们就可以把公共属性单独写出来,剩余属于各种商品本⾝的属性使⽤联合体起来,这样就可以
介绍所需的内存空间,⼀定程度上节省了内存
struct gift_list
{
 int stock_number;//库存量
 double price; //定价
 int item_type;//商品类型
 
 union{
     struct
     {
         char title[20];//书名
         char author[20];//作者
         int num_pages;//⻚数
     }book;
     struct
     {
         char design[30];//设计
     }mug;
     struct
     {
         char design[30];//设计
         int colors;//颜⾊
         int sizes;//尺⼨
     }shirt;
   }item;
};

枚举类型的声明

枚举(Enum)类型用于定义一组命名的整数常量。在C语言中,可以使用 enum 关键字来声明枚举类型。

枚举顾名思义就是⼀⼀列举。
把可能的取值⼀⼀列举。
比如我们现实生活中:
一周的星期一到星期日是有限的7天,可以⼀⼀列举
性别有:男、女、保密,也可以⼀⼀列举
月份有12个月,也可以⼀⼀列举
三原色,也是可以意义列举

一般的声明语法如下:

enum EnumName {
    EnumConstant1,
    EnumConstant2,
    // ...
};

 其中,EnumName 是枚举类型的名称,EnumConstant1EnumConstant2 等是枚举常量,它们是整数值,按照默认规则从0开始递增。

enum Day//星期
{
 Mon,
 Tues,
 Wed,
 Thur,
 Fri,
 Sat,
 Sun
};
enum Sex//性别
{
 MALE,
FEMALE,
 SECRET
};
enum Color//颜⾊
{
 RED,
 GREEN,
 BLUE
};
以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。
{}中的内容是枚举类型的可能取值,也叫枚举常量 。
这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。
enum Color//颜⾊
{
 RED=2,
 GREEN=4,
 BLUE=8
};

枚举类型的优点

  1. 可读性强: 枚举类型使得代码更具可读性。通过为一组相关的常量定义一个枚举类型,可以使代码更加清晰和易于理解。使用有意义的标识符来表示枚举常量,可以让代码的含义更加明确。

  2. 类型安全性: 枚举类型提供了一种类型安全的方式来表示一组相关的常量。在编译时,编译器会检查枚举类型中的值是否属于枚举中定义的范围,从而帮助避免因类型错误引起的潜在问题。

  3. 可扩展性: 枚举类型提供了一种灵活的方式来表示一组可能会随着时间变化而增加的常量。通过添加新的枚举常量,可以轻松地扩展现有的枚举类型,而不会对现有代码产生太大的影响。

  4. 编译器优化: 一些编译器可以对枚举类型进行优化,将其转换为更高效的表示方式,从而提高代码的执行效率。例如,编译器可以将枚举常量转换为整数或其他底层类型,以减少内存占用和运行时开销。

  5. 可移植性: 枚举类型的语法在大多数编程语言中都是通用的,因此代码具有良好的可移植性。无论在哪种编程环境中,枚举类型都可以被广泛地支持和使用。

枚举类型的使用

enum Color//颜⾊
{
 RED=1,
 GREEN=2,
 BLUE=4
};
enum Color clr = GREEN;//使⽤枚举常量给枚举变量赋值
那是否可以拿整数给枚举变量赋值呢?在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查比较严格。
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值