C语言学习(三十)---枚举、位段、联合体

news2024/11/17 21:26:41

这几天在往实习的地方弄东西,比较累,因此没有更新,在几天前我们学习了内存操作函数,其与之前学习的字符串操作函数相比,适用范围更加广泛,大家要注意掌握学习,今天我们将学习枚举位段联合体,好了,话不多说,开整!!!!

枚举

谈起枚举,其实在之前基础学习3,我们已经简要的进行了介绍,所谓枚举,也就是将所有的可能都列举出来,如性别只有男、女,再来个中性??
枚举的定义如下:

enum 枚举类名 
{
    内容1,
    内容2
};

可以看到和结构体定义方式较为相似,在枚举常量定义完成后,其会存储为相应的值,如以下代码:

#include<stdio.h>
enum S 
{
    male,
    famale
};
int main()
{
    enum S s;
    printf("%d %d",male,famale);
    return 0;
}

我们编译运行,可以结果分别为0、1
在这里插入图片描述
当然,在初始化时,初始值是可以更改的,比如将male的值改为1,则后续将会继续向下编号,如下代码:

enum S 
{
    male = 1,
    famale
};

我们再次编译运行,可以得到以下结果:
在这里插入图片描述
未在初始化时不可对其值进行更改,如以下代码:

#include<stdio.h>
enum S 
{
    male = 1,
    famale
};
int main()
{
    enum S s;
    famale = 4;
    printf("%d %d",male,famale);
    return 0;
}

编译运行,将会报错
在这里插入图片描述

位段

位段这个概念,其实我也是第一次听说过,在以前没有听说过这个内容,其意义为:

在结构体中,以比特位为单位开辟内存空间

其用法如下所示:

struct 结构体类名
{
    变量类型 变量名:位数 ;
    变量类型 变量名:位数 ;
};

比如以下代码:

#include<stdio.h>
struct tes
{
    int a:2 ; 
    int b:6;
    int c:30;
};
int main()
{
    struct tes test;
    test.a = 10;
    test.b = 20;
    printf("%d %d",test.a,test.b);
    return 0;
}

从上述代码中,我们可以看到我们向内存中申请了整型变量a中的2个比特位两个比特位也就是两根地址线最多可以表示 2 2 = 4 2^2 = 4 22=4个数,无符号时,最大表示为3,因此下面的赋值将会导致溢出,所以打印时,不会打印出数字10,而b申请了6个比特位,最大表示为 2 6 = 64 2^6 = 64 26=64,因此不会发生溢出,所以可以顺利打印,我们编译代码查看是否是这样:
在这里插入图片描述
从结果中看确实是这样,一个有符号数10,如果我们想要将其存储起来,至少保证 2 ? > 10 ∗ 2 2^?>10*2 2?>102;因此,我们需要申请5位,再进行打印:在这里插入图片描述
发现结果正确。
同时,在使用位段时,所要注意的是:

1、 位段中定义的变量类型必须为同类型,比如整型变量:int、unsigned int,signed int
2、位段中的位数不能超过32位(32位机器),64位机器不能超过64

联合体

联合体,也被称为共用体,也有是将不同类型的变量放在同一地址上
其使用方式如下:

union 类名
{
    变量类型 变量名称 ;
    变量类型 变量名称;
    变量类型 变量名称;
};

比如以下代码所示:

#include<stdio.h>
union test
{
    int a ;
    char b;
    char c[20];
};
int main()
{
    union test tes;
    printf("%p\n",&tes.a);
    printf("%p\n",&tes.b);
    printf("%p\n",&tes.c);
    return 0;
}

编译程序,查看内部三个变量的地址:
在这里插入图片描述
可以看见确实联合体共同使用一个地址

下节我们再与结构体一起,学习联合体的大小的有关问题

上述内容即使今天的全部内容了,感谢大家的观看。
如果方便,辛苦大家点个赞和关注哦!
您的点赞或评论或关注是对我最大的肯定,谢谢大家!!!

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

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

相关文章

闲置BROOKSTONE Rover间谍车重生记

22年春节在家&#xff0c;哪也去不了&#xff0c;收拾出来一个多年前的玩具&#xff0c;全名叫BROOKSTONE Rover revolution&#xff0c;长这个样子。 尽管是7年前的产品了&#xff0c;科技感依旧挺足 印象中能手机控制&#xff0c;并且能语音对讲。只是网上找到的安卓版应用已…

xenomai内核解析--xenomai实时线程创建流程

版权声明&#xff1a;本文为本文为博主原创文章&#xff0c;未经同意&#xff0c;禁止转载。如有错误&#xff0c;欢迎指正&#xff0c;博客地址&#xff1a;https://blog.csdn.net/qq_22654551?typeblog 文章目录 问题概述1 libCobalt中调用非实时POSIX接口2 阶段1 linux线程…

02_jQuery与Ajax

jquery jquery的作用 他是js的库 处理html,事件,实现动画效果,方便的为网站提供AJAX交互 命名格式 .ji:体积大,用于学习和debug使用 .min.js:压缩的文件,体积小,用于线上环境使用 使用方法 必须先在页面文件中进行引用 $就是jQuery 注意: jQuery是DOM的封装 jQuery和…

Spring Boot 中的服务网关是什么,原理,如何使用

Spring Boot 中的服务网关是什么&#xff0c;原理&#xff0c;如何使用 在微服务架构中&#xff0c;服务网关是一个非常重要的组件。它可以作为所有微服务的入口&#xff0c;负责路由、负载均衡、安全性和监控等方面的功能。Spring Boot 提供了一系列的服务网关工具&#xff0…

redis-哨兵安装

解决问题 自动故障修复 1.在主从模式的基础上,在主节点添加自己的认证密码即可 2.将代码客户端地址改为哨兵地址 ------------- 主节点配置 daemonize yes port 6379 bind 0.0.0.0 requirepass 123456 save 3600 1 300 100 60 10000dir /usr/local/redis dbfilename dump.r…

Java POI (4)—— Linux环境下文件解析过程出现OOM的问题

Excel文件在进行解析的时候&#xff0c;在Windows环境中&#xff0c;没用报错&#xff0c;但是在Linux环境中&#xff0c;出现了如下的报错&#xff1a; nested exception is javalang.OutofMemoryError: Java heap space &#xff08;OOM&#xff09; 一、内存溢出和栈溢出有什…

主流特征工程平台(一)

一. 目标 对于Feature Store的能力与边界&#xff0c;每家的定义略微不同&#xff0c;《Feature Stores - A Hierarchy of Needs》&#xff09;这篇文章做了很好的总结&#xff0c;大体分为如下几个层次&#xff1a; 特征管理&#xff1a;特征抽取、处理、存储、元数据管理&am…

群晖NAS 安装 MySQL 远程访问连接

目录 1. 安装Mysql 2. 安装phpMyAdmin 3. 修改User 表 4. 本地测试连接 5. 安装cpolar 6. 配置公网访问地址 7. 固定连接公网地址 [TOC] > **转载自cpolar极点云文章&#xff1a;[群晖NAS 安装 MySQL远程访问连接](https://www.cpolar.com/blog/install-mysql-remote-…

Spring 事务使用详解

前言 什么是事务&#xff1f;根据 维基百科事务 介绍&#xff0c;数据库事务&#xff08;简称&#xff1a;事务&#xff09;是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成。简单来说&#xff0c;事务就是将一系列操作当成一个不可拆分…

报喜鸟如何触发数字化转型及品牌扩张战略分析

传统服装企业往往面临缺乏创新、盲目扩张、追求低成本、库存和行业周期性等问题。报喜鸟通过深入分析市场需求&#xff0c;明确聚焦主业&#xff0c;提出加强品牌核心竞争力的价值主张。通过实施DTC转型&#xff0c;发力电商平台和线下门店等举措&#xff0c;报喜鸟成功提高品牌…

VSC++=》 指针实数排序

缘由https://bbs.csdn.net/topics/396523482 void 指针实数排序(double* aa, int d) {//缘由https://bbs.csdn.net/topics/396523482double lin 0; int j d, jj 0;while (jj < d) if (--j > jj) if (aa[j] > aa[j - 1])lin aa[j], aa[j] aa[j - 1], aa[j - 1] …

Flask request和requests(客户端服务器)

Flask request和requests 1、Flask request属性2、requests属性3、实现代码 1、Flask request属性 这么多属性什么时候有值什么时候没值&#xff0c;其实完全取决于我们请求头content-type是什么&#xff0c;如果是以表单形式multipart/form-data、application/x-www-form-url…

辅助驾驶功能开发-功能规范篇(21)-3-XP行泊一体方案功能规范

XPilot Parking 自动泊车系统 七、全自动泊车(AutoParking) • 自动泊车辅助(AutoParking Assist)、斜列式车位泊车辅助(Diagonal AutoParking Assist) - 产品定义 基于超声波传感器和环视摄像头对空间和车位的识别,通过自动泊车系统实现全自动泊车入库。 - 功能说…

使用HHDESK图形化功能管理服务器

服务器的管理通常繁琐而枯燥&#xff0c;需要大量的命令行来执行。 所以图形化功能应运而生。 本篇以传输文件为例&#xff0c;简单介绍一下HHDESK的图形化管理功能。 首先需要配置好服务器。 点击连接管理&#xff0c;在连接类型中选择SSH&#xff0c;按照刚才在服务器中配…

方波信号轨迹跟踪(过冲与圆角)

在控制系统中&#xff0c;方波信号轨迹跟踪可能会面临过冲和圆角的问题。过冲是指跟踪信号超过期望值的现象&#xff0c;而圆角是指在方波信号变化时产生平滑的过渡。这些问题主要是因为传统的控制方法无法完美跟踪非线性的方波信号导致的。 过冲通常也称为超调。在方波信号的…

C++中的vector使用详解及重要部分底层实现

本篇文章会对vector的语法使用进行详解。同时&#xff0c;还会对重要难点部分的底层实现进行讲解。其中有vector的迭代器失效和深拷贝问题。希望本篇文章的内容会对你有所帮助。 目录 一、vector 简单概述 1、1 C语言中数组的不便 1、2 C中的动态数组容器vector 二、vector的常…

vue中实现div可编辑,并插入指定元素,样式

前言&#xff1a; vue中实现一个既可以编辑内容&#xff0c;有可以动态编辑内容插入一个带有样式的内容&#xff0c;改变默认内容后&#xff0c;这个样式消失的效果&#xff0c;这里来整理下调研与解决实现问题之路。 实现最终效果&#xff1a;图2为默认内容 1、可以光标点击任…

自定义MVC框架优化

目录 一、前言 二、优化问题 1.子控制器的初始化配置问题 2.页面跳转优化代码冗余问题 3.优化参数封装问题 三、进行优化 1.解决子控制器初始化配置 2.解决页面跳转的代码冗余问题 3.解决优化参数封装问题 4.中央控制器 一、前言 在自定义MVC框架原理中讲述了什么是…

Redis - Redis GEO实现经纬度测算距离,附近搜索范围

Redis GEO 主要用于存储地理位置信息&#xff0c;并对存储的信息进行操作&#xff0c;该功能在 Redis 3.2 版本新增 一、Redis GEO 操作方法 geoadd&#xff1a;添加地理位置的坐标 geopos&#xff1a;获取地理位置的坐标 geodist&#xff1a;计算两个位置之间的距离 geor…

client-go初级篇,从操作kubernetes到编写单元测试

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 尽管长篇系列《client-go实战》的内容足够丰富&#xff0c;然而内容太多每个知识点也有一定深度&#xff0c;对于打算快速学习并开始kubernetes开发…