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

news2024/11/18 6:29:53

文章目录

  • 前言
  • 一、枚举
    • 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);  // 0
	printf("%d\n", Tues); // 1
	printf("%d\n", Wed);  // 2
	printf("%d\n", Thur); // 3
	printf("%d\n", Fri);  // 4
	printf("%d\n", Sat);  // 5
	printf("%d\n", Sun);  // 6
	
	return 0;
}
  1. 第一个枚举常量赋初值情况下的值
#include <stdio.h>

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

int main()
{
	printf("%d\n", Mon);  // 1
	printf("%d\n", Tues); // 2
	printf("%d\n", Wed);  // 3
	printf("%d\n", Thur); // 4
	printf("%d\n", Fri);  // 5
	printf("%d\n", Sat);  // 6
	printf("%d\n", Sun);  // 7

	return 0;
}
  1. 每个枚举常量赋初值情况下的值
enum Colr
{
	RED = 255,
	GREEN = 0,
	BLUE = 100
};
int main()
{
	printf("%d\n", RED); // 255
	printf("%d\n", GREEN); // 0
	printf("%d\n", BLUE); // 100

	return 0;
}
  • 可以基于枚举常量创建枚举类型的变量来存储常量。

#include <stdio.h>

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

int main()
{
	enum Day d = Fri;

	printf("%d\n", d); // 4
	return 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); // 000000B816AFFC64
	printf("%p\n", &u.c); // 000000B816AFFC64
	printf("%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");
	else
		printf("大端\n");

	return 0;
}

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

union Un
{
	char c;
	int n;
}u;

int main()
{
	u.n = 1;

	if (1 == u.c)
		printf("小端\n"); // 小端
	else
		printf("大端\n");

	return 0;
}

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis——MyBatis入门程序

一、数据准备 二、开发步骤 1、引入依赖 <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.15</version></dependency><dependency><groupId>c…

邻域注意力Transformer

邻域注意力&#xff08;NA&#xff09;&#xff0c;这是第一个高效且可扩展的视觉滑动窗口注意力机制&#xff0c;NA是一种逐像素操作&#xff0c;将自注意力&#xff08;SA&#xff09;定位到最近的相邻像素&#xff0c;因此与SA的二次复杂度相比&#xff0c;具有线性时间和空…

6 7 8 9 11 12 15 17 18 20 22cm散热风扇防护网风扇金属网罩

品牌&#xff1a;威驰 颜色分类&#xff1a;60mm/6cm金属网,80mm/8cm金属网,92mm/9.2cm金属网,110mm/11cm金属网,120mm/12cm金属网,150mm/15cm金属网,172mm/17.2cm金属网,200mm/20cm金属网,280mm/28cm金属网 1产品参数&#xff0c;防护网罩60 80 90 110 120 125 145 150 180…

详解:ic网站建设开发需要注意什么?

IC网站建设开发需注重专业内容的呈现、强大的产品检索功能、全面的技术支持、严格的合规性展示、便捷的采购工具、良好的用户账户管理、移动适应性和多语言支持&#xff0c;以及高性能与高安全性&#xff0c;以满足行业用户的专业需求&#xff0c;提升网站的实用性和吸引力。 …

linux - 搭建部署ftp服务器

ftp 服务: 实现ftp功能的一个服务,安装vsftpd软件搭建一台ftp服务器 ftp协议: 文件传输协议 (file transfer protocol),在不同的机器之间实现文件传输功能, 例如 视频文件下载,源代码文件下载 公司内部:弄一个专门的文件服务器,将公司里的文档资料和视频都存放…

游戏测试的基本要求

一.测试基本要求 1.研发开发游戏时&#xff1a;编写测试用例、提前开始测试独立模块、催促开发在规定工时完成内容 2.需求开发完成后&#xff1a;研发自测完成、我们执行测试用例、如果用例不完整&#xff08;时间够就维护用例&#xff09;、实际测试发现用例之外的问题 3.完…

DIY可视化软件环境准备

DIY官网可视化工具做好的可视化拖拽开发工具无须编程、零代码基础、所见即所得设计工具支持轻松在线可视化导出微信小程序、支付宝小程序、头条小程序、H5、WebApp、UNIAPP等源码 支持组件库,高颜值,卡片,列表,轮播图,导航栏,按钮,标签,表单,单选,复选,下拉选择,多层选择,级联选…

python中的数据可视化:二维直方图 hist2d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python中的数据可视化&#xff1a; 二维直方图 hist2d() 选择题 关于以下代码输出结果的说法中正确的是? import matplotlib.pyplot as plt import numpy as np x np.random.normal(0, 1, …

短剧奔向小程序,流量生意如何开启?

随着移动互联网的飞速发展&#xff0c;小程序作为一种轻量级、易传播的应用形态&#xff0c;逐渐在各个领域展现出其独特的商业价值。而最近爆火的短剧小视频作为一种受众广泛的娱乐形式&#xff0c;与小程序结合后&#xff0c;不仅为观众提供了更为便捷的观看体验&#xff0c;…

Windows下安装httpd

一、下载http安装包 1、下载地址 Welcome! - The Apache HTTP Server Project 2、点击“Download” 3、选择对应httpd服务&#xff0c;点击“Files for Microsoft Windows” 4、选择“Apache Lounge”&#xff0c;进入下载页面 5、点击“httpd-2.4.59-240404-win64-VS17.zip …

基于SSM框架多人命题系统

采用技术 基于SSM框架多人命题系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 学生端 登录 个人中心 公告信息 试题信息 管理员 登录 个人信息…

Blazor入门-基础知识+vs2022自带例程的理解

参考&#xff1a; Blazor 教程 - 生成首个应用 https://dotnet.microsoft.com/zh-cn/learn/aspnet/blazor-tutorial/intro Blazor基础知识&#xff1a;Visual Studio 2022 中的Blazor开发入门_vs2022 blazor webassembly-CSDN博客 https://blog.csdn.net/mzl87/article/detail…

局域网手机端远程控制手机

局域网手机端远程控制手机 随着科技的进步和智能设备的普及&#xff0c;远程控制技术在日常生活与工作中的应用越来越广泛。其中&#xff0c;局域网内的手机端远程控制手机技术&#xff0c;因其便捷性和实用性&#xff0c;受到了众多用户的关注。本文将简要介绍该技术及其应用…

【Vue】Vue的核心

目录 计算属性-computed插值语法实现methods实现计算属性实现使用使用总结&#xff1a; 监视属性-watch监视的两种写法&#xff1a;深度监视备注&#xff1a; computed和watch之间的区别 绑定样式class样式绑定字符串写法数组写法对象写法 style样式绑定对象式1对象式2数组式 条…

探索GitHub上的GPTs项目:泄露和被破解的GPT提示

GPTs项目是一个在GitHub上由用户linexjlin发起的开源项目&#xff0c;专注于提供泄露的GPT&#xff08;生成式预训练转换器&#xff09;提示。这些提示用于指导和优化AI模型的输出&#xff0c;进而提升代码生成的质量和效率。项目页面提供了丰富的功能和资源&#xff0c;旨在帮…

【C++】CentOS环境搭建-升级CMAKE

【C】CentOS环境搭建-升级CMAKE CMAKE报错CMake 3.12 or higher is required. You are running version 2.8.12.2升级步骤1.移除当前的cmake2.安装必要的构建工具和库3.下载最新的cmake源码并解压5.编译和安装6.验证安装 CMAKE报错CMake 3.12 or higher is required. You are r…

hypack如何采集多波束数据?(上)

多波束设备有3种&#xff1a;多波束阵列&#xff0c;比如Seabat T50P&#xff1b;相干声纳&#xff0c;比如EdgeTeck 6205&#xff1b;多个单波束并列&#xff0c;比如Ross Sweep System&#xff0c;见下图。 辅助传感器主要有&#xff1a;罗经&#xff08;提供航向&#xff09…

Linux 进程间通信 System V系列: 共享内存,信号量,简单介绍消息队列

进程间通信 System V系列: 共享内存,初识信号量 一.共享内存1.引入2.原理3.系统调用接口1.shmget2.shmat和shmdt3.shmctl 4.边写代码边了解共享内存的特性1.ftok形成key,shmget创建与获取共享内存2.shm相关指令3.shmat和shmdt挂接和取消挂接4.shmctl获取共享内存信息,释放共享内…

org.hsqldb.jdbcDriver 类,导致 ClassNotFoundException 异常如何解决?

确保JDBC驱动包存在&#xff1a;检查系统是否已经安装了HSQLDB JDBC驱动。如果没有安装或驱动没有正确放置在类路径中&#xff0c;需要下载并添加它。你可以从 HSQLDB官网 下载JDBC驱动包。 添加JDBC驱动到类路径&#xff1a;将下载的HSQLDB JDBC驱动&#xff08;通常是一个JA…

【ArcGISProSDK】condition属性

示例 通过caption属性可以看出esri_mapping_openProjectCondition的条件是一个工程被打开 condition的作用 由此可知示例中的Tab实在工程被打开才能使用&#xff0c;否则他禁用显示灰色&#xff0c;在未禁用的时候说明条件满足。 参考文档 insertCondition 元素 (arcgis.com…