【C语言】自定义类型(枚举,联合)详解

目录

一、枚举

      1、枚举类型的定义

      2、枚举的优点

      3、枚举的使用

二、联合

      1、联合类型的定义 

      2、联合的特点

      3、联合大小的计算

一、枚举

       枚举顾名思义就是列举,在C语言中是一种自定义类型,比如:要表达性别的时候可以是男、女、保密;要表达一周有几天可以是星期一到星期日。这些有限个数据都可以用枚举把它们列举出来。

      1、枚举类型的定义

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,当然在定义的时候也可以赋初值。

      2、枚举的优点

1. 增加代码的可读性和可维护性

2. 和#define定义的标识符比较枚举有类型检查,更加严谨。

3. 防止了命名污染(封装)

4. 便于调试

5. 使用方便,一次可以定义多个常量

      3、枚举的使用

     在上面我已经介绍完怎么定义枚举,接下来就该使用枚举了,先看一下下面代码:

       枚举常量可能取值其实都是有值的,默认第一个为0,后面的依次递增1,打印下来之后我们可以清晰的观察。

       这些枚举常量的可能取值是不能修改的,但是我们可以给它赋初值。 RED没有赋初值的话初始值还是0,给GREEN赋一个初值,在GREEN后面的枚举常量也就需要+1了。

二、联合

      1、联合类型的定义 

      联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

      举个例子:

      2、联合的特点

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

      观察上面的例子,为什么联合体un大小为4个字节,因为char c ,int i 它们两个共用了同一块空间,c的大小为1个字节,i的大小为4个字节,i是最大的成员,所以他们共用一块内存空间,就是4个字节了。下面例子可以看出它们确实共用了一块内存空间。

      3、联合大小的计算

1、联合的大小至少是最大成员的大小。

2、当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

         举个例子说明:

       但是最终联合体的大小是最大对齐数的倍数,而c已经占用了5个字节,所以需要浪费3个字节,最终大小为8个字节。

       但是最终联合体的大是最大对齐数的倍数,而c已经占用了14个字节,所以需要浪费2个字节,最终大小为16个字节。

讲到这里,C语言中的自定义类型就全部学习完了。要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

                                              

 老铁们,记着点赞加关注哦!!!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

x一季花开成海x

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

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

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

打赏作者

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

抵扣说明:

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

余额充值