【零基础C语言】联合体(共用体)和枚举

目录

自定义类型:联合体(共用体)和枚举

1.自定义类型:联合体(共用体)

 1.1 联合体的声明

1.2 联合体的特点

​编辑1.3 联合体的大小计算 

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

 1.5使用联合体写一个程序判断机器是大端还是小端存储

 2.自定义类型:枚举

 2.1枚举的声明

 2.2 枚举变量的优点


自定义类型:联合体(共用体)和枚举

1.自定义类型:联合体(共用体)

 联合体和结构体一样,可以又一个或者多个成员组成,成员也可以是不同的类型但是这些成员是共用一块空间的。

 1.1 联合体的声明

union S
{char c;int i;
};int main()
{union S s = { 0 };s.c = 1;printf("s.i = %d\n", s.i); // 1printf("sizeof(s) = %zd\n", sizeof(s)); // 4return 0;
}

 由于共用一块空间我们可以看到,我们赋值s.c,但是当我们打印s.i时依然是1。
 由于共用一块空间我们可以看到, 计算整个联合体类型s时大小为4。

1.2 联合体的特点

 联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)。

union Un
{char c;int i;
};int main()
{union Un u = { 0 };printf("&(u.c) = %p\n", &(u.c));printf("&(u.i) = %p\n", &(u.i));printf("&u     = %p\n", &u);return 0;
}
// 存储地址一样

union Un
{char c;int i;
};int main()
{union Un u = { 0 };u.i = 0x11223344;printf("u.i = %x\n", u.i);printf("u.c = %x\n", u.c);return 0;
}
// 小端存储,共用空间

1.3 联合体的大小计算 

  •  联合的⼤⼩⾄少是最⼤成员的⼤⼩。
  • 当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。

#include <stdio.h>
union Un1
{               //大小    个数char c[10]; // 1   -   10int i;      // 4   -   1
}; 
union Un2
{              // 大小     个数short c[3];//  2   -   3int i;     //  4   -   1
};
int main()
{//下⾯输出的结果是什么?printf("%zd\n", sizeof(union Un1)); //12printf("%zd\n", sizeof(union Un2)); //8return 0;
}

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

举例:
⽐如,我们要搞⼀个活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。
每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。
图书:书名、作者、⻚数
杯⼦:设计
衬衫:设计、可选颜⾊、可选尺⼨

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 size; //尺寸}shirt;}item;};

 1.5使用联合体写一个程序判断机器是大端还是小端存储

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

 2.自定义类型:枚举

  • 枚举顾名思义就是⼀⼀列举。
  • 把可能的取值⼀⼀列举。
  • ⽐如我们现实⽣活中:
  • ⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举
  • 性别有:男、⼥、保密,也可以⼀⼀列举
  • ⽉份有12个⽉,也可以⼀⼀列举
  • 三原⾊,也是可以意义列举

 2.1枚举的声明

enum Colcor //颜色
{RED,BLUE,GREEN
};
// 枚举类型 - enum Colcor// RED,BLUE,GREEN 属于枚举变量//枚举变量的值默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

 2.2 枚举变量的优点

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

//题目://1.下面代码的结果是:
enum ENUM_A
{X1,Y1,Z1 = 255,A1,B1,
};
int main()
{enum ENUM_A enumA = Y1;enum ENUM_A enumB = B1;printf("enumA = %d\nenumB = %d\n", enumA, enumB);return 0;
}//因为枚举变量默认从0开始,X1=0,Y1=1,//但是Z1 = 255,所有后面从255开始数起, A1=256,B1=257。 

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

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

相关文章

银行数字人民币系统应用架构设计

2019年10月&#xff0c;01区块链联合数字资产研究院发布了《人民币3.0&#xff1a;中国央行数字货币运行框架与技术解析》&#xff0c;从数字货币界定和人民币发展历程出发&#xff0c;区分了央行数字货币与比特币、移动支付等的区别&#xff0c;全面介绍了央行数字货币的发展历…

【Qt】使用Qt实现Web服务器(七):动态模板引擎

1、示例 2、源码 2.1 模板配置参数 配置文件中关于模板配置参数如下 path为存放模板的目录suffix为模板文件后缀[templates] path=templates suffix=.tpl encoding=UTF-8 cacheSize=1000000

springcloud+nacos服务注册与发现

快速开始 | Spring Cloud Alibaba 参考官方快速开始教程写的&#xff0c;主要注意引用的包是否正确。 这里是用的2022.0.0.0-RC2版本的springCloud&#xff0c;所以需要安装jdk21&#xff0c;参考上一个文章自行安装。 nacos-config实现配置中心功能-CSDN博客 将nacos-conf…

MySQL 排序的那些事儿

书接上回 上次发了几张图&#xff0c;给了几个MySQL Explain的场景&#xff0c;链接在这儿&#xff1a;你是不是MySQL老司机&#xff1f;来看看这些explain结果你能解释吗&#xff1f;MySQL 夺命6连问 我们依次来分析下这6个问题。 在分析之前&#xff0c;我们先来了解一下M…

GaussDB WDR分析之集群报告篇

AWR报告目前已经成为Oracle DBA分析问题&#xff0c;定位故障最为重要的报告&#xff0c;阅读与分析AWR报告的技能也是Oracle DBA必备的技能。国产数据库为了提高运维便捷性&#xff0c;都在做类似Oracle AWR报告的模仿&#xff0c;只不过由于指标体系不够完善&#xff0c;因此…

每日一题——LeetCode2549.统计桌面上的不同数字

方法一 模拟 维护一个数组arr&#xff0c;初始值为n,每次循环将arr[i] % j(1<j<n) 如果结果为1则将j加入&#xff0c; 最后将arr转为Set集合去重&#xff0c;Set的长度就是答案 var distinctIntegers function(n) {let arr[]arr.push(n)for(let i0;i<arr.length;i…

Spring Boot1

SpringBoot概述 Spring Boot是Spring提供的一个子项目&#xff0c;用于快速构建Spring应用程序 SpringBoot特性 起步依赖 本质上就是一个Maven坐标&#xff0c;整合了完成一个功能所需要的所有坐标 自动配置 遵循约定大于配置的原则&#xff0c;再boot程序启动后&#xff0…

阿里云4核16G服务器价格26.52元1个月、149.00元半年,ECS经济型e实例

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年&#xff0c;配置为阿里云服务器ECS经济型e实例ecs.e-c1m4.xlarge&#xff0c;4核16G、按固定带宽 10Mbs、100GB ESSD Entry系统盘&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接打开如下图&a…

zookeeper快速入门(合集)

zookeeper作为一个分布式协调框架&#xff0c;它的创建就是为了方便或者简化分布式应用的开发。除了服务注册与发现之外&#xff0c;它还能够提供更多的功能&#xff0c;但是对于入门来说&#xff0c;看这一篇就够了。后续会讲zookeeper的架构设计与原理&#xff0c;比如zookee…

Docker入门到实践之环境配置

Docker入门到实践之环境配置 docker 环境安装 Ubuntu/Debian: sudo apt update sudo apt install docker.ioCentOS/RHEL: sudo yum install dockerArch Linux: sudo pacman -S docker如果未安装成功&#xff0c;或者env的path未设置成功&#xff0c;运行时会报错 Bash: Do…

怎么拆解台式电脑风扇CPU风扇的拆卸步骤-怎么挑

今天我就跟大家分享一下如何选购电脑风扇的知识。 我也会解释一下机箱散热风扇一般用多少转。 如果它恰好解决了您现在面临的问题&#xff0c;请不要忘记关注本站并立即开始&#xff01; 文章目录列表&#xff1a;大家一般机箱散热风扇都用多少转&#xff1f; 机箱散热风扇选择…

力扣501 二叉搜索树中的众数 Java版本

文章目录 题目描述代码使用非递归的方法使用递归的方法并且遍历的同时统计众数 题目描述 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果…

web自动化--元素定位之xpath和css

元素定位 xpath绝对路径相对路径案例xpath策略&#xff08;路径&#xff09;案例xpath策略&#xff08;层级、扩展&#xff09;属性层级与属性层级与属性拓展层级与属性综合 csscss选择器&#xff08;id、类、标签、属性&#xff09;id选择器类选择器标签选择器属性选择器案例-…

基于springboot+vue的旅游推荐系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

亚稳态及其解决办法

异步电路 亚稳态 亚稳态亚稳态的产生原因什么是同步异步信号怎么消除亚稳态 亚稳态 在数字电路中&#xff0c;每一位数据不是1&#xff08;高电平&#xff09;就是0&#xff08;低电平&#xff09;。当然对于具体的电路来说&#xff0c;并非1&#xff08;高电平&#xff09;就是…

Flutter学习10 - Json解析与Model使用

对于网络请求返回的 Json 数据&#xff0c;一般会进行如下解析&#xff1a; 将 Json String 解析为 Map<String, dynamic>将 Json String 解析为 Dart Model 发起一个返回 Json String 的网络请求 import package:http/http.dart as http;void main() {_doGet(); }_do…

初始Java篇(JavaSE基础语法)(2)(逻辑控制)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 逻辑控制 顺序结构 分支结构 if语句 switch 语句 循环结构 while 循环 for 循环 do while 循环 输入输出 输出到控制台 从键盘输入 …

深度学习 tablent表格识别实践记录

下载代码&#xff1a;https://github.com/asagar60/TableNet-pytorch 下载模型&#xff1a;https://drive.usercontent.google.com/download?id13eDDMHbxHaeBbkIsQ7RSgyaf6DSx9io1&exportdownload&confirmt&uuid1bf2e85f-5a4f-4ce8-976c-395d865a3c37 原理&#…

Ubuntu安装教程——Desktop版本(细致入微的操作)

前言 首先我们准备Ubuntu的镜像文件 可以去Ubuntu的官方网站进行下载 https://ubuntu.com/download/desktop#get-ubuntu ubuntu-22.04.4-desktop-amd64.iso 一、安装Ubuntu桌面版操作系统 安装Ubuntu的操作系统的位置&#xff0c;方便管理和移动操作系统内的文件 使用镜像文…

pytest之统一接口请求封装

pytest之统一接口请求封装 pytest的requests_util.pyrequests_util.py 接口自动化测试框架的封装yaml文件如何实现接口关联封装yaml文件如何实现动态参数的处理yaml文件如何实现文件上传有参数化时候&#xff0c;怎么实现断言yaml的数据量大怎么处理接口自动化框架的扩展&#…