栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言自定义结构类型之枚举,联合

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言自定义结构类型之枚举,联合

自定义结构类型之枚举,联合

文章目录
  • 自定义结构类型之枚举,联合
  • 枚举
    • 枚举定义
    • 枚举的优点
  • 联合(共用体)
    • 联合体定义
    • 联合体的特点
    • 联合大小的计算


枚举

枚举就是一一列举,

枚举定义
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 Day//星期
{
 Mon = 1,
 Tues = 2,
 Wed,
 Thur,
 Fri,
 Sat,
 Sun
};

后面默认加1;

枚举的优点
#define//宏定义

我们知道可以通过#define来定义常量;

#define Mon 1
#define Tues 2
#define Wed 3
#define Thur 4
#define Fri 5
#define Sat 6
#define Sun 7

enum Day
{
 Mon,
 Tues,
 Wed,
 Thur,
 Fri,
 Sat,
 Sun
};

为什么不能用#define?而要来个enum?

  1. 增加代码的可读性和可维护性
  2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
  3. 防止了命名污染(封装)
  4. 便于调试
  5. 使用方便,一次可以定义多个常量 枚举的使用

联合(共用体) 联合体定义
//联合类型的声明
union Un
{
 char c;
 int i;
};
//联合变量的定义
union Un un;
//计算连个变量的大小
printf("%dn", sizeof(un));

特征是这些成员公用一块空间;

联合体的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

但是真正的只是简单地最大成员的大小吗?

union Un
{
 int i;
 char c;
};
union Un un;
// 下面输出的结果是一样的吗?
printf("%dn", &(un.i));
printf("%dn", &(un.c));
//下面输出的结果是什么?
un.i = 0x11223344;
un.c = 0x55;
printf("%xn", un.i);


我们看到了un.i和un.c的地址是相同的,当我们给赋值时,也发现也是公用的。
但是大小怎么计算?

联合大小的计算
  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
union Un1
{
 char c[5];
 int i;
};
union Un2
{
 short c[7];
 int i;
};
//下面输出的结果是什么?
printf("%dn", sizeof(union Un1));
printf("%dn", sizeof(union Un2));



也是有对齐的。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011510.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号