C语言联合和枚举讲解

目录

 联合体的大小

 联合体如何省空间

巧用联合体 

联合判断大小端(惊为天人,大佬写的,我借鉴) 

 枚举

枚举类型的使用 


首先我们先看一下菜鸟教程中的对C语言联合体的说明

 联合体的大小

 

#include <stdio.h>
union u
{char c;int u;
};int main()
{union u n;printf("%zd\n", sizeof(n));return 0;;
}

 这里为什么是4呢?

 

 这里已经给了我们答案,为了更加直观,我们取地址打印一下

 

#include <stdio.h>
union u
{char c;int u;
};int main()
{union u n;printf("%p\n", &n);printf("%p\n", &n.c);printf("%p\n", &n.u);return 0;;
}

 

所以联合体也叫共用体

我们在这解释一下联合体大小应该怎样计算

1.联合体的大小至少是最大成员的大小。

2.当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

上述的计算方法的第二点我们写个代码再解释一下

#include <stdio.h>
union Un1
{char c[5];//5//注意此时如果是数组的话要按照数据所属的类型大小来计算,char类型就是1//1  8  1int i;//4 8  4
};int main()
{printf("%zd\n", sizeof(union Un1));return 0;
}

 

 有了这样代码中的注释我们或许就能理解结构体大大小是如何计算的。

 联合体如何省空间

 

对于商品来说,他们具有相同的价格类型,产地信息,但有的商品具有的信息别的商品没有,我们完全可以写出一个结构体包含这这个他们的公共属性和各自具有的属性,但这样的话太浪费空间了,比如说你此时就想描述一件商品,那你还需要再描述其他两件不必要的特殊属性了。

因此我们的解决办法是现将公共属性单独写出来,剩余属于各个商品本身的特殊属性我们就用联合体联合起来,这样做的话,就节省了空间。

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[20];//设计int colors;//颜色int sizes;//尺寸}shirt;}item; 
};

这样写就很节省空间了。

巧用联合体 

 我们来看一个比较厉害的代码:(一个int类型,一次取出一个字节)

union U
{int n;//4struct S{char c1;char c2;char c3;char c4;}s;//4
};int main()
{union U u = { 0 };u.n = 0x11223344;printf("%x %x %x %x\n", u.s.c1, u.s.c2, u.s.c3, u.s.c4);return 0;
}

联合判断大小端(惊为天人,大佬写的,我借鉴) 

 

int check()
{union{char c;int i;}u;u.i = 1;return u.c;
}int main()
{int ret = check();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

 

 此时char不用进行强制转换,因为字符型的ascll类型也是整型

 枚举

enum day
{Mon,Tues,Web,Thur,Fri,Sat,Sun
};int main()
{printf("%d\n", Mon);printf("%d\n", Tues);printf("%d\n",Web);printf("%d\n", Thur);printf("%d\n", Fri);printf("%d\n", Sat);printf("%d\n", Sun);return 0;
}

 

枚举类型默认值为0

还有我们可以对我们枚举中的数据进行初始化,但他们都是常量,因此在主函数中,我们要再想要改变他们的值,那编译器就会报错。我们对其进行初始化我们进行观察一下

 

 

 我们再来看一下我们在主函数中更改他的值进行报错的情况:

 

 

因此在使用时我们应该注意。

枚举类型的变量必须是属于枚举类型的,我们对此进行展示

enum day
{Mon=2,Tues=4,Web=5,Thur=6,Fri=9,Sat=11,Sun=19
};int main()
{enum day s = Mon;s = Fri;return 0;
}

 

枚举的优点:

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

枚举类型的使用 

enum day
{Mon=2,Tues=4,Web=5,Thur=6,Fri=9,Sat=11,Sun=19
};int main()
{enum day s = Mon;//使用枚举常量给枚举变量赋值return 0;
}

 

C语言中可以拿整数给枚举变量赋值,但C++中不行。

若有收获,就点个赞吧!

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

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

相关文章

Proteus仿真--基于ADC0808设计的调温报警器

本文介绍基于ADC0808实现的调温报警器设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 温度调节使用滑动变阻器模拟实现&#xff0c;ADC0808采集信号并输出在LCD上面显示&#xff0c;报警系统是LED灯和蜂鸣器实现声光电报警 仿真图如下 仿真运行视频 Proteus仿真…

前程无忧接口分析

前程无忧接口分析 所需用到的工具URL解析通过抓包软件或者开发者选项抓取数据包对代码中的参数解析分析对acw_sc__v2进行分析对acw_sc__v2进行转换代码生成生成outPutList数组生成arg2参数生成arg3参数最终的效果 对详情页面的分析对timestamp__1258的生成分析 所需用到的工具 …

Ubuntu22.04安装完成后便可直接使用键盘上的Print键进行截图

概要&#xff1a;Ubuntu22.04安装完成后&#xff0c;无需安装什么截图软件&#xff0c;可以直接使用键盘上的Print键进行截图。 1、按一下Print键 我的电脑上Print键是PrtSc&#xff0c;如下图所示 2、框选区域并截图 如下图中&#xff0c;可以框选(Selection)&#xff0c;也…

【教学类-35-06】17号的学号字帖延伸出的全体字帖(1-9去0)(A4竖版1份)

作品展示 背景需求&#xff1a; 给大4班17号同学单独做了一个学号字帖后&#xff0c;我想可以把这样的学具用在中班&#xff08;我马上要成为中4班老师了&#xff09;&#xff0c;那就需要给全班做一份这样的大号学号贴。 使用17号同学的word模板&#xff08;见下文&#xff…

3dMax vs Cinema4d哪个更好更适合你?

Cinema 4d和3dMax的区别 用于游戏风格、开发和风格可视化的3D建模、动画和渲染软件系统&#xff0c;为用户提供制作和编辑动画、视觉效果和环境的灵活性。4D CINEMA可能是由MAXON构建的强大的3D建模、运动图形、绘画和动画软件系统。Cinema 4D将在每个Windows和MAC操作系统上运…

前端学习系列之CSS

目录 CSS 简介 发展史 优势 基本语法 引用方式 内部样式 行内样式 外部样式 选择器 id选择器 class选择器 标签选择器 子代选择器 后代选择器 相邻兄弟选择器 后续兄弟选择器 交集选择器 并集选择器 通配符选择器 伪类选择器 属性选择器 CSS基本属性 优…

JS如何实现竖屏轮播图

首先是HTML搭建结构 <div class"banner-box"><div class"bannerbox"><div class"banner"><a class"a-img-ban"> <img class"img-ban" src"./img/640 (4).jpg" alt"终于等到你还…

SpringBoot项目访问resources下的静态资源

1.新建一个配置文件夹&#xff0c;放配置类 2.编辑 WebMvcConfig.java package com.southwind.configuration;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import or…

openlayers地图使用---跟随地图比例尺动态标绘大小的一种方式3

openlayers地图使用—跟随地图比例尺动态标绘大小的一种方式 预期&#xff1a;随着地图比例尺放大缩小&#xff0c;地图上的标绘随着变化尺寸 思路&#xff1a;通过VectorImage和动态修改Feature尺寸实现Feature跟随地图比例尺尺寸变化 优点&#xff1a;结合第1和第2种方式的…

openlayers地图使用---跟随地图比例尺动态标绘大小的一种方式2

openlayers地图使用—跟随地图比例尺动态标绘大小的一种方式2 预期&#xff1a;随着地图比例尺放大缩小&#xff0c;地图上的标绘随着变化尺寸 思路&#xff1a;通过不断添加地图图层实现标绘的动态缩放 优点&#xff1a;标绘放大缩小非常流畅 缺点&#xff1a;标绘超过1000…

LangChain 22 LangServe用于一键部署LangChain应用程序

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

3DCAT+上汽奥迪:打造新零售汽车配置器实时云渲染解决方案

在 5G、云计算等技术飞速发展的加持下&#xff0c;云渲染技术迎来了突飞猛进的发展。在这样的背景下&#xff0c;3DCAT应运而生&#xff0c;成为了业内知名的实时云渲染服务商之一。 交互式3D实时云看车作为云渲染技术的一种使用场景&#xff0c;也逐步成为一种新的看车方式&a…

设备温度和振动综合监测:温振一体式传感器的优点和应用

随着工业设备的复杂性和自动化程度的提高&#xff0c;对设备状态监测的需求也日益增加。温振一体式传感器作为一种集振动和温度监测于一体的传感器&#xff0c;具备多项优势&#xff0c;因此在工业设备状态监测领域得到广泛应用。 温振一体式传感器基于振动传感器和温度传感器的…

网络运维与网络安全 学习笔记2023.12.1

网络运维与网络安全 学习笔记 第三十二天 今日目标 ACL原理与类型、基本ACL配置、高级ACL配置 高级ACL之ICMP、高级ACL之telnet ACL原理与类型 项目背景 为了企业的业务安全&#xff0c;要求不同部门对服务器有不同的权限 PC1不能访问Server PC2允许访问Server 允许其他所…

043:vue项目一直出现 sockjs-node/info?t=XX的解决办法

第043个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

Linux文件系统与基础IO

文章目录 1 C文件接口1.1 fopen1.2 fwrite、fread、rewind、fclose 2 文件系统调用2.1 open2.1.1 参数2&#xff1a;flags2.1.2 参数3&#xff1a;mode2.1.3 返回值——file descriptor 2.2 write2.3 read2.4 close 3 文件的本质3.1 struct file3.2 一个进程如何与多个文件相关…

Python 日志指南

目录 日志指南 日志基础教程 什么时候使用日志 一个简单的例子 记录日志到文件 从多个模块记录日志 记录变量数据 更改显示消息的格式 在消息中显示日期/时间 后续步骤 进阶日志教程 记录流程 记录器 处理器 格式器 配置日志记录 如果没有提供配置会发生什么 …

QLoRA论文概述

QLORA: Efficient Finetuning of Quantized LLMs QLoRA论文概述前言&#xff08;省流版本&#xff09;摘要论文十问实验实验1数据集和模型实验结论 实验2数据集和模型实验结论 局限性模型尺度数据集其他微调方法 QLoRA论文概述 前言&#xff08;省流版本&#xff09; 微调需要…

期末速成数据库极简版【查询】(2)

目录 select数据查询----表 【1】筛选列 【2】where简单查询 【3】top-n/distinct/排序的查询 【4】常用内置函数 常用日期函数 常用的字符串函数 【5】模糊查询 【6】表数据操作——增/删/改 插入 更新 删除 【7】数据汇总 聚合 分类 ​ &#x1f642;&#…

分享十几个适合新手练习的软件测试项目

说实话&#xff0c;在找项目的过程中&#xff0c;我下载过&#xff08;甚至付费下载过&#xff09;N多个项目、联系过很多项目的作者&#xff0c;但是绝大部分项目&#xff0c;在我看来&#xff0c;并不适合你拿来练习&#xff0c;它们或多或少都存在着“问题”&#xff0c;比如…