当前位置: 首页 > article >正文

C语言_自动义类型:联合和枚举

1. 联合体

1.1 联合体类型的声明

与结构体相似,联合体也是有一个或多个成员(可以是不同类型)构成;但是编译器只为最大的成员分配足够的内存空间

联合体的特点是所有成员共用同一块内存空间,所以联合体也叫:共用体
声明方式如下:

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

1.2 联合体的特点及使用场景

为了保存联合体最大成员的数据,它的内存空间至少是最大成员的内存大小

为了便于理解,下面有俩段代码供大家分析:
代码1:

#include<stdio.h>union Un
{char c;int i;
};int main()
{union Un un={0};printf("%p\n",&(un.c));// 输出 001AF22Cprintf("%p\n",&(un.i));// 输出 001AF22Cprintf("%p\n",&un);    // 输出 001AF22Creturn 0;
}

代码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); //输出 11223355return 0;
}

给大家一个联合体使用场景,体会一下它存在的意义:
比如我们要上线一个礼品兑换单,礼品兑换单中有三种商品:图书、杯子、衬衫;这三种商品的共用信息有:库存量、价格
而除了这两个信息之外还有各种商品特有的性质,如:
图书:书名、作者
杯子:可选颜色
衬衫:可选颜色、可选尺寸
这时要是用结构体,那就得包含每种商品的所有私有属性,会大大占用内存,而用联合体就会避免内存的浪费,见下方代码:

struct gift_list
{int stock_number;//库存量double price;//价格union {struct{char title[20];//书名char author[20];//作者}book;struct{char colors;//颜色}mug;struct{char colors;//颜色int sizes;//尺寸}shirt;}item;
};

1.3 结构体和联合体的内存分布对比

我们先给出一个相同成员的结构体和联合体:

struct S
{char c;int i;
};
struct S s={0};union Un
{char c;int i;
};
union Un un={0};

他们的内存分布如图所示:
在这里插入图片描述

1.4 利用联合判断系统大小端

附上代码:

int check_sys()
{union{int i;char c;}un;un.i=1;return un.c;// 返回1是小端,返回0是大端
}

2. 枚举

2.1 枚举类型的声明

枚举顾名思义就是列举的意思,把可能的取值一一列举。
比如:

enum Day
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};enum Sex
{MALE,FEMALE,SECRET
};

2.2 枚举类型的使用

enum Color
{RED=0,GREEN=2,BLUE=4
};enum Color clr=GREEN;//使用枚举常量给枚举变量赋值

在C语言中可以给枚举变量赋值整数,在C++中不可以

2.3 枚举类型的优点

我们可以使用 #define 定义常量,为什么用要使用枚举?

枚举的优点:
1、增加代码的可读性和可维护性
2、和#define定义的标识符比较枚举有类型检查,更加严谨
3、便于调试,预处理阶段会删除 #define 定义的符号
4、使用方便,一次可以定义多个常量
5、枚举常量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用

相关文章:

C语言_自动义类型:联合和枚举

1. 联合体 1.1 联合体类型的声明 与结构体相似&#xff0c;联合体也是有一个或多个成员&#xff08;可以是不同类型&#xff09;构成&#xff1b;但是编译器只为最大的成员分配足够的内存空间 联合体的特点是所有成员共用同一块内存空间&#xff0c;所以联合体也叫&#xff…...

汽车紧固件涂层18问:看敦普无铬锌铝涂料如何为螺丝防锈防腐

导读 在汽车紧固件防锈涂装领域&#xff0c;敦普牌紧固件无铬锌铝涂料&#xff0c;是专为汽车紧固件打造的水性涂料&#xff0c;集防锈、环保、高性价比于一体。它有何独特之处&#xff1f;让我们一探究竟。​ 1、敦普紧固件无铬锌铝涂料是什么产品&#xff1f; 敦普紧固件无铬…...

掘金中亚货代蓝海,易境通货代系统解锁数字化制胜密码!

2025年&#xff0c;中亚地区正成为全球物流行业的新蓝海。中亚五国因其独特的地缘位置和“一带一路”倡议的深化推进&#xff0c;正逐渐成为全球物流行业的战略要地。 在政策红利、基建升级与市场需求的叠加效应下&#xff0c;中亚物流市场预计在2025年迎来爆发式增长。但传统…...

Python内存管理:赋值、浅拷贝与深拷贝解析

赋值与共享资源 在Python中&#xff0c;直接赋值操作&#xff08;如 list2 list1&#xff09;会导致两个变量共享同一个内存地址。这意味着对 list1 的修改会直接影响到 list2&#xff0c;因为它们指向同一个对象。 注意: 赋值等于完全共享资源 如果我们不希望这样完全共享&…...

W1R3S: 1.0.1靶场

W1R3S: 1.0.1 来自 <W1R3S: 1.0.1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.249 3&#xff0c;对靶机进行端口…...

深度学习-分布式训练机制

1、分布式训练时&#xff0c;包括train.py的全部的代码都会在每个gpu上运行吗&#xff1f; 在分布式训练&#xff08;如使用 PyTorch 的 DistributedDataParallel&#xff0c;DDP&#xff09;时&#xff0c;每个 GPU 上运行的进程会执行 train.py 的全部代码&#xff0c;但通过…...

[Mamba轻量化]DefMamba: Deformable Visual State Space Model,CVPR2025

paper 文章目录 AbstractMethod整体模型架构可变形状态空间模型 Experiments Abstract 然而&#xff0c;大多数现有的视觉Mamba方法使用预定义的扫描顺序将图像展平为1D序列&#xff0c;导致模型在特征提取过程中对图像空间结构信息的利用能力减弱。为解决这一问题&#xff0…...

CSRF 和 XSS 攻击分析与防范

CSRF 和 XSS 攻击分析与防范 CSRF (跨站请求伪造) 什么是 CSRF&#xff1f; CSRF (Cross-Site Request Forgery) 是一种攻击方式&#xff0c;攻击者诱使用户在已登录目标网站的情况下&#xff0c;执行非预期的操作。 攻击流程&#xff1a; 用户登录可信网站 A在不登出 A 的…...

找银子 题解(c++)

题目 思路 首先&#xff0c;这道题乍一看&#xff0c;应该可以用搜索来做。 但是&#xff0c;搜索会不会超时间限制呢&#xff1f; 为了防止时间超限,我们可以换一种做法。 先创立两个二维数组&#xff0c;一个是输入的数组a&#xff0c;一个是数组b。 假设 i 行 j 列的数…...

中国版 Cursor?腾讯推出 AI 编程助手 CodeBuddy,重新定义编程体验

人工智能&#xff08;AI&#xff09;技术的迅猛发展正深刻地变革着各个行业&#xff0c;编程领域也不例外。以原生 IDE 体验见长的 Cursor&#xff0c;凭借其 Agent 模式在 AI 编程领域脱颖而出&#xff0c;对 GitHub Copilot 以及 VS Code 与 JetBrains 全家桶的地位发起挑战。…...

JVM学习专题(二)内存模型深度剖析

目录 1.JVM结构体系 ​编辑 2.跨平台特性 3.JVM整体结构及内存模型 1.栈内存 1、栈帧&#xff1a; 1.局部变量表 2.操作数栈 3.动态链接 4.方法出口 2、创建对象 2.程序计数器&#xff1a; 3.方法区 ​4.堆 5.本地方法区 6.总结 1.JVM结构体系 JDK、JRE 和 JVM…...

密码学实验:凯撒密码

密码学实验&#xff1a;凯撒密码 一、实验目的 掌握凯撒密码的数学原理&#xff1a;理解字符移位与模运算的结合&#xff0c;实现加解密算法。理解暴力破解本质&#xff1a;通过穷举有限密钥空间&#xff0c;掌握利用语言特征破解密文的方法。编程实践&#xff1a;用Python实…...

linux备份与同步工具rsync

版权声明&#xff1a;原创作品&#xff0c;请勿转载&#xff01; 文章目录 版权声明&#xff1a;原创作品&#xff0c;请勿转载&#xff01; 实验环境介绍&#xff1a; 1.工具介绍 2.详细介绍 2.1 本地模式&#xff08;用得少&#xff09; 2.2 远程模式 2.3 守护进程模式…...

PYTHON训练营DAY26

一、函数 &#xff08;一&#xff09;不带参数的函数 # 定义一个简单的问候函数 def greet():"""打印一句问候语。"""message "大家好&#xff01;欢迎学习Python函数定义&#xff01;"print(message)greet()&#xff08;二&#x…...

WPS一旦打开,就会修改默认打开方式,怎么解?

目录 前言 解决方法 结语 前言 电脑上同时存在WPS和微软的Office全家桶&#xff0c;但是我更喜欢用Office全家桶。前几天刚在设置改过来&#xff0c;忘记更改pdf文件打开默认应用。结果没过几天&#xff0c;不小心用WPS打开pdf文件时候&#xff0c;给我把默认设置全改回去了…...

从概念到可工程化智能体的转变路径——以“知识奇点工程师”为例

产品部门定义了一个如下概念性的“知识奇点工程师”&#xff0c;他们构建的不仅仅是一个数据库或知识图谱&#xff0c;而是一个活的、能自我进化的知识生态系统&#xff0c;是整个“Neuralink for Education”宏伟蓝图的基石。他们的工作难度和重要性&#xff0c;不亚于为AI引擎…...

单片机-STM32部分:12、I2C

飞书文档https://x509p6c8to.feishu.cn/wiki/MsB7wLebki07eUkAZ1ec12W3nsh 一、简介 IIC协议&#xff0c;又称I2C协议&#xff0c;是由PHILP公司在80年代开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备&#xff0c;IIC属于半双工同步通信方式。 IIC是一种同步…...

Payload的定义及核心概念

在IT领域&#xff0c;Payload&#xff08;有效载荷&#xff09; 指数据传输或操作中承载实际功能或信息的主体部分&#xff0c;与协议头、元数据等辅助内容区分。其核心特点是完成特定目标&#xff0c;例如传递关键数据、执行代码逻辑或实现攻击行为。 主要应用场景及技术解析 …...

idea插件使用

文章目录 在哪里安装插件常用插件 在哪里安装插件 离线下载插件请参考我的文章–>可复用性代码 在线下载 插件 &#xff1a;File(文件) —> Settings(设置) —> Plugins(插件) 常用插件 汉化插件&#xff1a;Chinese (Simplified) Language Pack /中文语言包。作者:…...

计算机网络笔记(二十四)——4.6互联网的路由选择协议

4.6.1有关路由选择协议的几个基本概念 路由选择协议是计算机网络中维护和生成路由表的核心机制。 1. 路由选择的核心目标 转发&#xff08;Forwarding&#xff09;&#xff1a;路由器基于本地转发表&#xff0c;将分组从输入链路转移到输出链路&#xff08;单台路由器的本地…...

UniApp 微信小程序绑定动态样式 :style 避坑指南

在使用 UniApp 开发跨端应用时&#xff0c;绑定动态样式 :style 是非常常见的操作。然而&#xff0c;很多开发者在编译为 微信小程序 时会遇到一个奇怪的问题&#xff1a; 原本在 H5 中可以正常渲染的样式&#xff0c;在微信小程序中却不生效&#xff01; 让我们通过一个示例来…...

论文阅读与写作:《从探索到突破:解密科研和论文写作的思维密码》

文章目录 一、如何做科研1.科研的步骤2.课题选择3.快速入门一个新领域&#xff1a;读论文&#xff0c;先读综述(1)自己看论文的时候&#xff0c;每篇论文花3-5分钟记录一下自己的idea和一些瞬间的想法(2)高质量文献&#xff1a;顶会顶刊(3)如何检索 4.注重团队协作与学术交流5.…...

致远OA绩效考核管理应用【附百度网盘下载链接,官方售价8K】

产品概述 绩效考核管理预置三种考核方式&#xff1a;工作事务考核、关键绩效考核、360度考评&#xff0c;满足不同企业考核需求&#xff0c;从考核等级定义、考核方案设置、考核分发到员工考核&#xff0c;再到考核结果汇总并审批&#xff0c;对绩效考核全过程进行闭环管理&…...

Vue百日学习计划Day4-8——Gemini版

番茄时钟&#xff1a; 每个番茄钟为25分钟学习&#xff0c;之后休息5分钟。每完成4个番茄钟&#xff0c;进行一次15-30分钟的长休息。灵活性&#xff1a; 这仍然是一个建议性计划。某些主题&#xff08;尤其是 Flexbox 和 Grid&#xff09;可能需要比预期更多的时间来练习和理解…...

HarmonyOS NEXT 适配高德地图FlutterSDK实现地图展示,添加覆盖物和移动Camera

HarmonyOS NEXT 适配高德地图 Flutter SDK 实现地图展示&#xff0c;添加覆盖物和移动 Camera 在现代移动应用开发中&#xff0c;地图功能是许多应用的核心组成部分之一。HarmonyOS NEXT 提供了强大的跨平台开发能力&#xff0c;而高德地图 Flutter SDK 则为开发者提供了丰富的…...

DeepSeek执行流程加速指南:跨框架转换与编译优化的核心策略全解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

docker-compose——安装redis

文章目录 一、编写docker-compose.yaml文件二、编写redis.conf文件三、启动docker-compose 一、编写docker-compose.yaml文件 version: 3.3 services:redis:image: redis:latestcontainer_name: redisrestart: alwaysports:- 6379:6379volumes:- ./redis/data:/data- ./redis/…...

manuskript开源程序是面向作家的开源工具

一、软件介绍 文末提供程序和源码下载 manuskript开源程序是面向作家的开源工具&#xff0c;Manuskript 可在 GNU/Linux、Mac OS X 和 Windows 上运行。 二、Features 特征 Manuskript provides a rich environment to help writers create their first draft and then furt…...

游戏引擎学习第281天:在房间之间为摄像机添加动画效果

回顾并为今天的内容定下基调 这次我们要继续深入处理实体系统。在前一阶段对实体系统做了一些很酷的改动&#xff0c;但现在到了要认真面对和完善它的时候。 今天的主要目标是修复并优化摄像机在房间之间移动时的逻辑。在上一次的实现中&#xff0c;我们重新启用了基于房间的…...

Kaamel隐私合规洞察:Temu在韩被罚事件分析

Kaamel隐私合规与数据安全团队分析报告 韩国个人信息保护委员会&#xff08;PIPC&#xff09;对中国电子商务巨头Temu处以巨额罚款&#xff0c;原因是其严重违反了用户数据保护法律 。核心违规行为包括未经适当披露或用户同意非法跨境传输数据、未能指定当地代表、账户注销流程…...