【C语言】联合和枚举

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

【C语言】联合和枚举,学习C语言ing,c语言,开发语言,算法,数据结构,学习方法,学习,程序人生
个人主页点这里~


一、联合体

1、联合体类型的声明

联合体的定义与结构体相似,但是联合体往往会节省更多的空间,它的特点是所有成员共用一块内存空间,结构体也叫共用体
联合体中给某一成员赋值,其他成员值往往会跟着变化

#include <stdio.h>
union Un
{
	char c;
	int i;
};
int main()
{
	union Un un = { 0 };
	printf("%d\n", sizeof(un));
	return 0;
}

定义联合体我们用的是union,定义格式与结构体相差不多,大括号里边是成员变量
输出结果:
【C语言】联合和枚举,学习C语言ing,c语言,开发语言,算法,数据结构,学习方法,学习,程序人生
按照结构体的标准来说,这里应该是8,但为什么会是4呢?
就是因为前边提到的:联合体的成员共用一块内存空间

2、联合体成员的特点

联合变量的大小至少是最大成员变量的大小

#include <stdio.h>
union Un
{
	char c;
	int i;
};
int main()
{
	union Un un = { 0 };
	un.i = 0x11223344;
	un.c = 0x55;
	printf("%x\n", un.i);
	printf("%p\n", &(un.i));
	printf("%p\n", &(un.c));
	printf("%p\n", &un);
	return 0;
}

【C语言】联合和枚举,学习C语言ing,c语言,开发语言,算法,数据结构,学习方法,学习,程序人生
我们发现第一行输出11223344被修改成了11223355
第二行联合体地址,联合体成员地址都是一个地址
所以我们验证了联合体成员变量共用一块内存
【C语言】联合和枚举,学习C语言ing,c语言,开发语言,算法,数据结构,学习方法,学习,程序人生

3、与结构体对比

struct Un
{
	char c;
	int i;
};
union Un
{
	char c;
	int i;
};

【C语言】联合和枚举,学习C语言ing,c语言,开发语言,算法,数据结构,学习方法,学习,程序人生
结构体内存中,灰色的是浪费掉的内存

4、计算联合体大小

联合体的大小至少是最大成员的大小
当最大成员大小不是最大对齐数的整数倍时,要对齐到最大对齐数的整数倍

#include <stdio.h>
union Un1
{
	char c[5];//1
	int i;//4
};
//当成员中有数组时,用其数组中每个数据的数据类型来比较最大对齐数
//4为最大对齐数,最大数为5,对齐到4的整数倍,即为8
union Un2
{
	short c[7];//2
	int i;//4
};
//4为最大对齐数,最大数为14,对齐到4的整数倍,即为16
int main()
{
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	return 0;
}

【C语言】联合和枚举,学习C语言ing,c语言,开发语言,算法,数据结构,学习方法,学习,程序人生
我们在采购物品时(图书,杯子,笔记本,衣服),可以写一个结构来录入它们的信息

struct list
{
	//公共属性
	int stock_number;//库存量
	double price; //定价
	int item_type;//商品类型
	//特殊属性
	char title[20];//书名
	char author[20];//作者
	int num_pages;//⻚数

	char design[30];//设计
	int colors;//颜⾊
	int sizes;//尺⼨
};

我们用结构可以很快的写出来,但是这样会占用一些不必要的内存,例如图书没必要录入它的颜色,设计等属性,杯子也没有书名和作者,这样,我们的联合就可以发挥它的作用,在一定程度上节省内存

struct gift_list
{
	int stock_number;//库存量
	double price; //定价
	int item_type;//商品类型

	union {
		struct
		{
			char title[20];//书名
			char author[20];//作者
			int num_pages;//⻚数
		}book;
		struct
		{
			int colors;//颜色
			int sizes;//尺寸
			char design[30];//设计
		}cup;
		struct
		{
			char design[30];//设计
			int colors;//颜⾊
			int sizes;//尺⼨
		}clothes;
		struct
		{
			int num_pages;//页数
			int sizes;//尺寸
		}notebook;
	}item;
};

二、枚举

1、枚举的声明

枚举就是一一列举的意思,枚举用enum来定义,定义方法也是类似结构体与联合体的方式

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

enum Day就是枚举类型,大括号中的内容为枚举类型的可能取值,也叫枚举常量,这些枚举常量都是有值的,默认从0开始,依次递增1,也可以赋初始值

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

从上到下值依次为0 1 2 2 3 4 5
中间赋值,前面从头开始为0,依次递增1,到该枚举常量时,取被赋予的值,然后往下还是依次递增1

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

从上到下值依次为4 5 6 7 8 9 10
依次递增1

2、枚举的优点

我们知道#define也可以完成枚举这样的效果,那为什么我们还要使用枚举呢?
①增强代码的可读与可维护性
②和#define相比枚举有类型检查,更加安全严谨
③便于调试,在预处理阶段,会删除#define定义的符号,直接用所替换的值替换,导致预处理与真实代码不统一,无法更好地调试
④使用方便,一次可以定义多个常量
⑤枚举遵循作用域规则,枚举声明在函数内,只能在函数内使用

3、枚举类型的使用

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

使用枚举常量为枚举变量赋值,在C语言中可以用整数来给枚举变量赋值,但在C++中不可以


今日分享就到这里了~

【C语言】联合和枚举,学习C语言ing,c语言,开发语言,算法,数据结构,学习方法,学习,程序人生文章来源地址https://www.toymoban.com/news/detail-851112.html

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

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

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

相关文章

  • 【C语言】联合体和枚举

    【C语言】联合体和枚举

    前言 这篇博客就把剩下的两个自定义类型联合体和枚举好好总结一下,让我们好好看看联合体和枚举到底是什么 个人主页:小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录  1. 联合体 1.1 联合体类型的声明  1.2 联合体的特点  1.3 相同成员的结构体和联合体对比  

    2024年04月14日
    浏览(8)
  • c语言-联合体和枚举

    c语言-联合体和枚举

    (1) 像结构体⼀样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。 (2)但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。 (3) 给联合体其中⼀个成员赋值,其他成员的值也跟着

    2024年02月04日
    浏览(8)
  • c语言-枚举和联合体

    c语言-枚举和联合体

    本篇文章介绍c语言中的枚举类型和联合体类型 枚举类型和结构体类型相似,都是一种自定义类型。 定义枚举类型的: enum 枚举类型的定义格式 例如,定义一个星期作为枚举类型 枚举类型的第一个成员的取值默认为0,依次往后递增1, 输出枚举WEEK每个成员的值 修改枚

    2024年01月21日
    浏览(15)
  • 【C语言】进阶——结构体+枚举+联合

    【C语言】进阶——结构体+枚举+联合

    在之前【C语言】初阶——结构体 ,简单介绍了结构体。而C语言中结构体的内容还有更深层次的内容。 结构体( struct )是由一系列具有相同类型或不同类型的数据项构成的数据集合,这些数据项称为结构体的成员。 struct student 是类型, stu 是结构体类型变量 2.1结构体的初始化

    2024年02月08日
    浏览(6)
  • C语言进阶——自定义类型:枚举、联合

    C语言进阶——自定义类型:枚举、联合

    🌇个人主页:_麦麦_ 📚今日名言:如果不去遍历世界,我们就不知道什么是我们精神和情感的寄托,但我们一旦遍历了世界,却发现我们再也无法回到那美好的地方去了。当我们开始寻求,我们就已经失去,而我们不开始寻求,我们根本无法知道自己身边的一切是如此可贵

    2024年01月21日
    浏览(42)
  • C语言枚举与联合体详解

    C语言枚举与联合体详解

        本篇文章带来 枚举与联合体 相关知识详细讲解! 如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作的动力之源,让我们一起加油,一起奔跑,让我们顶峰相见!!! 目录 一.枚举 1.什么是枚举? 2.枚举类型的定义 3.枚举的优点 4.枚举的使用 二.联合体(共

    2024年02月15日
    浏览(9)
  • 【C语言】结构体+位段+枚举+联合(2)

    【C语言】结构体+位段+枚举+联合(2)

    大家好,我是苏貝,本篇博客带大家了解结构体和位段以及枚举,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 这是这个系列的第二篇,上一篇详细介绍了结构体的基本知识,详情请点击 现在大家应该都已经掌握了结构体的基本使用了,现在我们深入讨论

    2024年02月08日
    浏览(14)
  • C语言:自定义类型——联合和枚举

    C语言:自定义类型——联合和枚举

    像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以是不同的类型。 声明方式如下图: 那联合体和结构体究竟有什么区别呢?? 下面将重点讲解联合体的特点!! 1.2.1 特点1 所有成员共⽤同⼀块内存空间。所以联合体也叫: 共⽤体 。 我们可以发现,三个地

    2024年01月16日
    浏览(9)
  • 【学习笔记】数据结构算法文档(类C语言)

    1.1.1 线性表的顺序存储表示 1.1.2 顺序表中基本操作的实现 1.1.2.1 初始化 1.1.2.2 取值 1.1.2.3 查找 1.1.2.4 插入 1.1.2.5 删除 1.1.2.6 计数 1.2.1 单链表的定义和表示 ★ 关于结点 1.2.2 单链表基本操作的实现 1.2.2.1 初始化 1.2.2.2 取值 1.2.2.3 查找 1.2.2.4 插入 1.2.2.5 删除 1.2.2.6 前插法创建单

    2024年02月07日
    浏览(33)
  • 【C语言】自定义类型——枚举、联合体

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

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

    2024年02月04日
    浏览(14)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包