【C语言__联合和枚举__复习篇10】

目录

前言

一、联合体

        1.1 联合体的概念

        1.2 联合体与结构体关于声明和内存布局的比较

        1.3 联合体的大小如何计算

        1.4 使用联合体的2个示例

二、枚举体

        2.2 枚举体的概念

        2.2 枚举体的优点


前言

本篇主要讨论以下问题:

1. 联合体是什么,它有什么特点

2. 联合体的大小如何计算

3. 枚举体是什么,它有什么特点

4. 枚举体相对于#define来说有什么优点

一、联合体

1.1 联合体的概念

1. 联合体和结构体除了关键字和在分配内存空间的规则上有所差别,其他的方面都类似。

2. 特点1:联合体的所有成员共用同一块空间,所以联合体也被称为共用体,给联合体其中一个成员赋值,其他成员的值也会跟着变化,所以在使用联合体变量时不会同时使用联合体的多个成员变量。

3. 特点2(联合体的大小方面):编译器只会为最大成员分配足够的内存空间,但联合体的大小不一定是最大成员的大小,因为它也是存在内存对齐的。

#include <stdio.h>
//联合体类型的声明
union Un
{
	char c;
	int i;
};

int main()
{
	//联合体局部变量的定义
	union Un un = { 0 };
	//计算联合体类型的大小
	printf("%zd\n", sizeof(union Un));//4
	return 0;
}
#include <stdio.h>
//联合类型的声明
union Un
{
	char c;
	int i;
};

int main()
{
	//联合变量的定义
	union Un un = { 0 };
	//观察地址
	printf("%p\n", &(un.i));
	printf("%p\n", &(un.c));
	printf("%p\n", &un);

	//联合变量的定义
	union Un un = { 0 };
	un.i = 0x11223344;
	un.c = 0x55;
	printf("%x\n", un.i);//11223355
	return 0;
}

1.2 联合体与结构体关于声明和内存布局的比较

1.3 联合体的大小如何计算

1. 联合的⼤⼩⾄少是最⼤成员的⼤⼩。

2. 当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,联合体的大小要先满足最⼤对⻬数的整数倍

#include <stdio.h>
union Un1
{
     char c[5];//1 8 1
     int i;//4 8 4
};

union Un2
{
     short c[7];//2 8 2,数组算对齐数时,按元素算对齐数
     int i;//4 8 4
};

int main()
{
     //下⾯输出的结果是什么?
     printf("%d\n", sizeof(union Un1));//4
     printf("%d\n", sizeof(union Un2));//8
     return 0;
}

1.4 使用联合体的2个示例

使⽤联合体是可以节省空间的,

举例1: ⽐如,我们要搞⼀个活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。 每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。

图书:书名、作者、⻚数

杯⼦:设计

衬衫:设计、可选颜⾊、可选尺⼨

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

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

举例2:写⼀个程序,判断当前机器是⼤端,还是⼩端

#include <stdio.h>
int check_sys()
{
	union
	{
		int i;
		char c;
	}un;
	un.i = 1;
	return un.c;//返回1是⼩端,返回0是⼤端
}

二、枚举体

2.2 枚举体的概念

1. 枚举顾名思义就是⼀⼀列举的意思,生活中可以一 一列举的东西,可以考虑使用枚举体。

2. 语法形式: enum tag

                       {

                               //枚举类型的可能取值,即枚举常量

                       };

3. 特点1:枚举常量值默认从0开始依次递增1,这些枚举常量可以初始化,但不能被修改。

4. 特点2:枚举类型的变量只能被赋予枚举常量的值。

#include <stdio.h>
enum Sex
{
	MALE = 5,
	FEMALE,
	SECRET
};

int main()
{
	enum Sex Lisi = MALE;
	printf("%d\n", Lisi);//5
	return 0;
}

2.2 枚举体的优点

1. 增加代码的可读性和可维护性。

2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。

3. 便于调试,预处理阶段会删除 #define 定义的符号。

4. 使⽤⽅便,⼀次可以定义多个常量。

5. 枚举常量是遵循作⽤域规则的,枚举类型声明在函数内,枚举常量则只能在函数内使⽤。

   本篇文章已完结,谢谢支持!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每天一题crypto(1)---RSA(小明文攻击)

零.做题&#xff1a; 看到N很大&#xff0c;如果满足 就表示模过程中&#xff0c;没有丢失信息&#xff0c;所以 直接解即可&#xff0c;不要管pq等等 一.题目&#xff1a; N很大 from Crypto.Util.number import * from gmpy2 import *flag bNSSCTF{******}p getPrime(5…

【SpringBoot整合系列】SpringBoot配置多数据源

目录 背景技术选型配置多数据源思路(以两个为例)代码实现1.导入依赖2.各自的配置 3.各自的dataSourcenews数据库的smbms数据库的注意&#xff1a;Primary注解 4.各自的SqlSessionFactory等news数据库的smbms数据库的 5.去掉启动类头上的MapperScan6.各自的mapper接口7.各自的ma…

防火墙分为哪三类以及他们的优缺点

1. 包过滤防火墙&#xff08;Packet Filtering Firewall&#xff09;2. 状态检查防火墙&#xff08;Stateful Inspection Firewall&#xff09;3. 应用层防火墙&#xff08;Application Layer Firewall&#xff09;零基础入门学习路线视频配套资料&国内外网安书籍、文档网络…

Spring Cloud Alibaba Sentinel 使用

初识Sentinel Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址&#xff1a; home | Sentinel 需要了解的概念 簇点链路 在学习 Sentinel 的使用之前&#xff0c;我们有必要首先了解一下簇点链路。当请求进入微服务时&#xff0c;首先会访Controller、Service、Ma…

C++11可变模板参数

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

百面算法工程师 | 卷积基础知识——Convolution

目录 8.1 图像卷积过程 8.2 卷积层基本参数 8.3 卷积后图像的长和宽大小的计算方式 8.4 卷积神经网络中的权重共享 8.5 上采样中的反卷积 8.6 空洞卷积 8.7 深度可分离卷积 8.8 为什么可分离卷积中Depthwise卷积后还要进行pointwise卷积 8.9 分组卷积 Group Conv 8.1…

前端导入的方便方法

直接上代码&#xff1a; 利用input的导入功能 这是相应的处理方法 是不是很简单呢

《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-01-软件架构演化概述

文章目录 1. 演化的重要性2. 架构演化示例 教材中&#xff0c;本节名为&#xff1a;“软件架构演化和定义的关系” 1. 演化的重要性 演化目的&#xff1a;维持软件架构自身的有用性 为什么说&#xff0c;软件架构是演化来的&#xff0c;而不是设计来的&#xff1f; 软件架构的…

【Shell】循环结构——for和while循环实例

Shell可以重复地执行特定的指令&#xff0c;直到特定的条件被满足为止。这重复执行的一组指令就叫做循环 特点&#xff1a; 首先&#xff0c;循环条件中使用的变量必须是已初始化的&#xff0c;然后在循环中开始执行每次在循环开始时进行一次测试重复地执行一个代码块 循环实例…

SD-WAN怎样提高企业网络体验

随着数字化转型的加速&#xff0c;传统基于MPLS的专用网络因其高度的结构化和僵化性&#xff0c;已无法满足现代企业对于灵活性和成本效益的日益增长的需求。相比之下&#xff0c;SD-WAN作为一种创新的网络架构&#xff0c;正以其卓越的性能和灵活的管理方式&#xff0c;成为企…

服务于金融新核心系统 星辰天合与中电金信完成产品兼容认证

近日&#xff0c;北京星辰天合科技股份有限公司&#xff08;简称&#xff1a;XSKY星辰天合&#xff09;与中电金信软件有限公司&#xff08;简称&#xff1a;中电金信&#xff09;完成产品兼容性认证&#xff0c;星辰天合的企业级分布式统一数据平台 XEDP 符合金融级数字底座&q…

ECG-Emotion Recognition(情绪识别)-- 数据集介绍WESADDREAMER

1、WESAD数据集 下载链接&#xff1a;WESAD: Multimodal Dataset for Wearable Stress and Affect Detection | Ubiquitous Computing &#xff08;1&#xff09;基本介绍 WESAD是一个用于可穿戴压力和影响检测的新的公开数据集。该多模式数据集以实验室研究期间15名受试者的生…

学习JFinal

1.五个配置类 configConstants&#xff08;配置&#xff09;&#xff1a; configRoute&#xff08;路由&#xff09;&#xff1a; 2.Controller层&#xff08;控制器&#xff09; 访问流程&#xff1a; Action&#xff1a; getPara&#xff1a; 参数说明&#xff1a;第一个参…

13.Blender 界面介绍(下) 雕刻、纹理绘制及属性

界面介绍 1. 布局 物体的移动旋转和缩放等操作 2. 建模 里面就是有一些建模常用的功能 里面的功能对于做MMD来说不是必备的操作 3. 雕刻 使用里面的工具可以对物体本身进行修改 4. UV编辑 如果想要编辑UV贴图 将编辑模式改为纹理绘制 再点击右边的工具 如果进行编…

MySQL-----多表查询(一)

目录 一.多表关系&#xff1a; 1.1 一对多(多对一)&#xff1a; 1.2 多对多: 1.3 一对一: 二.多表查询概述&#xff1a; 三.连接查询&#xff1a; 3.1内连接&#xff1a; 3.2外连接&#xff1a; 3.3自连接查询&#xff1a; 3.4联合查询&#xff1a; 一.多表关系&…

告别单一密码,多因素身份认证带你进入安全新纪元!

文章目录 前言一、你知道什么&#xff1f;二、你拥有什么1.智能卡2.令牌 三、你是什么四、其他因素身份认证 前言 当我们探讨多因子/多因素身份认证时&#xff0c;我们可能会好奇这里的“因素”具体指的是什么&#xff1f;显然&#xff0c;用户名和密码是一种因素&#xff0c;…

iclientOpenlayer用uniapp开发移动端GIS应用设计及实现

GIS移动端应用是将地理信息系统&#xff08;GIS&#xff09;技术应用于移动设备&#xff08;如智能手机、平板电脑&#xff09;上&#xff0c;使用户能在户外或移动场景下访问、收集、分析和展示地理信息。以下是GIS移动端应用的一些关键特性和应用场景&#xff1a; 关键特性&…

淘宝新店没有流量和访客怎么办

淘宝新店没有流量和访客时&#xff0c;可以采取以下措施来提升店铺的流量和吸引更多的访客&#xff1a; 3an推客是给商家提供的营销工具&#xff0c;3an推客CPS推广模式由商家自主设置佣金比例&#xff0c;以及设置商品优惠券&#xff0c;激励推广者去帮助商家推广商品链接&…

c++初阶——类和对象(中)

大家好&#xff0c;我是小锋&#xff0c;我们今天继续来学习类和对象。 类的6个默认成员函数 我们想一想如果一个类什么都没有那它就是一个空类&#xff0c;但是空类真的什么都没有吗&#xff1f; 其实并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以…

C++ | Leetcode C++题解之第43题字符串相乘

题目&#xff1a; 题解&#xff1a; class Solution { public:string multiply(string num1, string num2) {if (num1 "0" || num2 "0") {return "0";}int m num1.size(), n num2.size();auto ansArr vector<int>(m n);for (int i …