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

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

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

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