C语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍

本文主要是介绍C语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、枚举
    • 1. 枚举类型的定义
    • 2. 枚举的特点
  • 二、联合(共用体)
    • 1. 联合类型的定义
    • 2. 联合的特点
    • 3. 联合大小的计算
    • 4. 联合体判断大小端
      • 1. 不适用联合体判断大小端
      • 2. 使用联合体判断大小端
  • 总结


前言

C语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍

一、枚举

顾名思义,枚举就是一一列举。

1. 枚举类型的定义

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

enum Sex
{MALE,FEMALE,SECRET
};

enum Colr
{RED,GREEN,BLUE
};
  • 上述代码中, enum Day, enum Sex, enum Color 都是枚举类型
  • {} 中的内容是枚举类型的可能取值, 也叫 枚举常量
  • 这些可能取值都是有值的默认从 0 开始, 一次递增 1
  • 定义的时候可以赋初值
  • 只 赋予第一个枚举常量初值, 后面的常量会递增 1。
  • 也可以给每个枚举常量都赋初值
  1. 默认情况下枚举常量的值
#include <stdio.h>enum Day
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};
int main()
{printf("%d\n", Mon);  // 0printf("%d\n", Tues); // 1printf("%d\n", Wed);  // 2printf("%d\n", Thur); // 3printf("%d\n", Fri);  // 4printf("%d\n", Sat);  // 5printf("%d\n", Sun);  // 6return 0;
}
  1. 第一个枚举常量赋初值情况下的值
#include <stdio.h>enum Day
{Mon = 1,Tues,Wed,Thur,Fri,Sat,Sun
};int main()
{printf("%d\n", Mon);  // 1printf("%d\n", Tues); // 2printf("%d\n", Wed);  // 3printf("%d\n", Thur); // 4printf("%d\n", Fri);  // 5printf("%d\n", Sat);  // 6printf("%d\n", Sun);  // 7return 0;
}
  1. 每个枚举常量赋初值情况下的值
enum Colr
{RED = 255,GREEN = 0,BLUE = 100
};
int main()
{printf("%d\n", RED); // 255printf("%d\n", GREEN); // 0printf("%d\n", BLUE); // 100return 0;
}
  • 可以基于枚举常量创建枚举类型的变量来存储常量。

#include <stdio.h>enum Day
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};int main()
{enum Day d = Fri;printf("%d\n", d); // 4return 0;
}

2. 枚举的特点

1. 增加代码的可读性和可维护性
2. 和 #define 定义的标识符比较,枚举有类型检查, 更加严谨
3. 防止了命名污染(封装)
4. 便于调试
5. 使用方便,一次可以定义多个常量
  • 枚举增加类型的检查,在 c 语言中体现不明显, 比如在 c++ 中的如下赋值:
    在这里插入图片描述
    所以,只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。

二、联合(共用体)

1. 联合类型的定义

联合也是一种特殊的自定义类型

  • 这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以联合也叫共用体)。
union Un
{char c;int n;
};
  • union 是联合的关键词
  • Un 是 联合的标签名

2. 联合的特点

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

联合的成员不同时使用

union Un
{char c;int n;
};
int main()
{union Un u;printf("%p\n", &u); // 000000B816AFFC64printf("%p\n", &u.c); // 000000B816AFFC64printf("%p\n", &u.n); // 000000B816AFFC64
}

在这里插入图片描述

3. 联合大小的计算

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
#include <stdio.h>
union Un
{char c;int n;
};
int main()
{union Un u;printf("%d\n", sizeof(u));// 4
}

#include <stdio.h
union U1
{char arr[5];int n;
};int main()
{union U1 u1;printf("%d\n",  sizeof(u1)); // 8
}

在这里插入图片描述

4. 联合体判断大小端

1. 不适用联合体判断大小端

int check_sys(int a)
{return *(char*)&a; // 1
}int main()
{int a = 1;if (1 == check_sys(a))printf("小端\n");elseprintf("大端\n");return 0;
}

2. 使用联合体判断大小端

union Un
{char c;int n;
}u;int main()
{u.n = 1;if (1 == u.c)printf("小端\n"); // 小端elseprintf("大端\n");return 0;
}

总结

C语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍

这篇关于C语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963256

相关文章

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十