c语言-枚举和联合体

这篇具有很好参考价值的文章主要介绍了c语言-枚举和联合体。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本篇文章介绍c语言中的枚举类型和联合体类型

一、枚举类型

1.1 枚举类型的定义

枚举类型和结构体类型相似,都是一种自定义类型。
定义枚举类型的关键字:enum
枚举类型的定义格式

enum 枚举名
{
	枚举元素1,
	枚举元素2,
	...
};

例如,定义一个星期作为枚举类型

enum WEEK
{
	Mon,
	Tues,
	Wed,
	Thus,
	Fri,
	Sat,
	Sun
};

枚举类型的第一个成员的取值默认为0,依次往后递增1,
输出枚举WEEK每个成员的值
c语言-枚举和联合体,c语言进阶,c语言

修改枚举类型成员的默认值

enum WEEK
{
	Mon = 1, //修改默认值为1
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};

输出修改后枚举WEEK每个成员的值
c语言-枚举和联合体,c语言进阶,c语言

1.2 枚举类型的使用

c语言-枚举和联合体,c语言进阶,c语言
把一个整型值赋值为枚举类型变量

	int a = 1;
	enum WEEK day;
	day = (enum WEEK)a; //类型转换

1.3 枚举的优点

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

二、联合体类型

2.1 联合体类型的定义

联合体类型也是一种自定义类型
定义联合体类型的关键字:union
联合体类型定义的格式

union 联合体名
{
	类型1 成员名;
	类型2 成员名;
	...
};

例如,定义一个联合体类型Un

union Un
{
	int i;
	char c;
};

联合体类型与结构体类型,枚举类型相似,也可以定义匿名联合体,例如

//定义一个匿名联合体
//定义匿名联合体时,和匿名结构体类型,必须同时定义匿名联合体变量
//my_union就是匿名联合体类型变量
union
{
	int i;
	char c;
}my_union;

2.2 联合体类型的特点

联合体的成员共用一块内存空间,因此也称联合体为共用体。
定义一个联合体

union Un
{
	int i;
	char c;
};

输出联合体Un的大小
c语言-枚举和联合体,c语言进阶,c语言
输出联合体成员的地址
c语言-枚举和联合体,c语言进阶,c语言
由输出结果可知,联合体u的成员i的地址和成员c的地址相同,说明两个成员指向同一块空间的起始位置,共用一块空间。

联合体u的内存情况如下
c语言-枚举和联合体,c语言进阶,c语言

练习:使用联合体判断大小端

代码实现

int check_sys()
{
	union  //定义匿名联合体
	{
		int i;
		char c;
	}uu;

	uu.i = 1;
	//1的16进制形式 0x00000001
	//低地址->高地址(32位机器)
	//大端字节序 00 00 00 01  
	//小端字节序 01 00 00 00 
	//uu.c = 0 则为大端字节序
	//uu.c = 1 则为小端字节序
	return uu.c;
}

输出结果
c语言-枚举和联合体,c语言进阶,c语言


2.3 联合体大小的计算

  • 当联合体的最大成员是最大对齐数的整数倍,则联合体大小等于最大成员的大小
union Un
{
	int i;
	char c;
};

联合体Un的最大成员为4个字节,联合体的最大对齐数为4,那么i的大小即为联合体的大小

  • 当联合体的最大成员不是最大对齐数的整数倍时,则联合体大小需对齐到最大对齐数的整数倍
union Un_2
{
	char str[5];
	int i;
};

分析联合体大小:

联合体成员 char str[5],大小为5个字节
当成员为数组时,数组的对齐数为元素类型的大小,vs默认对齐数为8
则str的对齐数为1
联合体成员int i ,大小为4个字节 ,vs默认对齐数为8
则i的对齐数4
联合体的最大对齐数为4
联合体的最大成员为5个字节,不是最大对齐数的整数倍
则联合体大小对齐到8个字节

输出联合体大小:

c语言-枚举和联合体,c语言进阶,c语言


总结

本篇文章首先介绍c语言的枚举类型定义以及枚举类型的使用;最后介绍联合体类型的定义、联合体的特点以及如何计算联合体的大小。文章来源地址https://www.toymoban.com/news/detail-811068.html

到了这里,关于c语言-枚举和联合体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】自定义类型——枚举、联合体

    对枚举、联合体进行介绍,包括枚举的声明、枚举的优点,联合体的声明、联合体的大小。                  ✨  猪巴戒 :个人主页✨                 所属专栏 :《C语言进阶》         🎈 跟着猪巴戒 ,一起学习C语言🎈 目录 引言 枚举 枚举的优点 联合(共用体

    2024年02月04日
    浏览(45)
  • C语言 联合体验证 主机字节序 +枚举

    枚举(Enumeration)是一种在编程语言中表示一组具名 常量 的数据类型。 枚举常常用于定义一组相关的离散值,比如颜色、星期几、月份等。 爱编程的大丙

    2024年02月04日
    浏览(38)
  • C语言中的联合体和枚举

           联合体的是union 除了和结构体不一样之外,联合体的创建语法形式和结构体的很相似,如果不熟悉结构体的创建,可以看一下我上一篇的博客关于结构体知识的详解。        联合体的成员是共用一块内存空间的,这也就是意味着它更节省空间,那也就

    2024年04月10日
    浏览(56)
  • c语言->自定义类型联合体和枚举类型

    文章目录 ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青_C语言,函数,指针-CSDN博客 目的:学习联合体和枚举类型的声明联合体的特点和大小,枚举类型的有点和使用。 像结构体⼀样,联合体也是由⼀个或者多个成员构

    2024年02月05日
    浏览(35)
  • C语言从入门到实战——联合体和枚举

    C语言中,联合体(union)是一种特殊的数据类型,允许存储不同类型的数据在同一块内存空间中。联合体的大小取决于其中最大的成员的大小,共享同一块内存空间的成员可以存储不同类型的数据。 联合体的定义方式与结构体类似,使用 union ,后跟联合体的名称。联

    2024年01月17日
    浏览(40)
  • C语言——自定义类型详解[结构体][枚举][联合体]

    我打算把结构体、枚举、联合体的重点内容总结一下,方便后期复习的时候能够更快,更准确的去拾取遗忘的知识。也希望能给大家起到借鉴的作用,不足的地方,请多多包涵。(不足的地方,也希望大家能够指出来) 结构体是一些值的集合,这些集合称为成员变量,结构体

    2024年02月13日
    浏览(42)
  • 【C语言】自定义类型的详细讲解2(枚举类型、联合体类型)

    目录 1.枚举 1.1枚举优点 2.联合(共用体) 2.1联合体的应用 2.2联合体的存放 上一篇文章与大家分享并深度讨论研究了自定义类型中结构体和位段的内容,那么今天继续研究枚举和联合体的内容,希望对你有所帮助 枚举类型顾名思义就是一一列举。 把可能的取值一一列举出来

    2023年04月18日
    浏览(43)
  • C语言中的“三体”大佬们知道是什么吗? —— 结构体、枚举、联合体

    目录 前言 结构体 基本概念 结构体类型的声明 结构的声明 特殊的声明 结构的自引用 结构体变量的定义和初始化 结构体的对齐规则: 为什么要内存对齐 修改默认对齐数 修改默认对齐数的预处理命令 实际例子 结构体传参 结构体实现位段(位段的填充) 位段 什么是位段 位

    2024年02月12日
    浏览(66)
  • 探索C语言中的联合体与枚举:数据多面手的完美组合!

    ​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 联合体 又叫 共用体 ,它是一种特殊的数据类型,允许您在 相同的内存位置存储不同的数据类型 。给联合体其中⼀个成员赋值,其他成员的值也跟着变

    2024年02月19日
    浏览(42)
  • 【C语言】一篇文章深入解析联合体和枚举且和结构体的区别

    联合体( union )是允许一个变量通过不同的接口访问内存的一种数据类型,表示一个变量可以存储不同类型的值,而枚举是使用 enum 定义一组相关且互斥的整形常量集合。本章阿森将和你学习联合体类型的声明,特点,有关大小的计算,还有枚举类型的声明,优点和使

    2024年02月03日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包