C_11_位段,共同体,枚举

news2024/11/13 10:55:57

位段

位段也称 位域

1 字节 = 8 位域

概述:

特殊的结构体

大小按位分配

示例1:

struct packed_data
{
     unsigned int a : 2; // 占2 位
     unsigned int a : 4; // 占4 位
     unsigned int a : 6; // 占6 位
     unsigned int i;     // 占4字节 32位 1b=8位
} data;

在这里插入图片描述

位段 不能取地址,因为地址最小都是1字节单位的存储

注意:

不能对位段成员取地址

赋值时,不要超出位段定义的范围

位段成员的类型必须指定为整形或字符型

一个位段必须存放在一个存储单元中,不能跨两个单元

位段的长度不能大于存储单元的长度

示例2:另起一行

#include <stdio.h>
struct stu
{
   char a : 3;
   char : 0; // 另起一行
   char c : 2;
} temp;
int main(int argc, char const *argv[])
{
   printf("%d\n", sizeof(struct stu));
   return 0;
}

示例3:定义无意义位段

#include <stdio.h>
struct stu
{
     char a : 3;
     char : 2; // 无意义位段
     char c : 2;
} temp;
int main(int argc, char const *argv[])
{
     printf("%d\n", sizeof(struct stu));
     return 0;
}

共用体:

共用体所有成员占有同一段地址空间(核心)

要是结构体 内存大小 是 8

但共同体按最大的算 类似大的覆盖小的 就是 4

在这里插入图片描述

概述:

共用体和结构体类似,也是一种构造类型的数据结构

在进行某些算法的时候,需要使几种不同类型的变量存到同一段内存单元中,几个变量

所使用空间相互重叠

共用体所有成员占有同一段地址空间(核心)

共用体的大小是其占内存长度最大的成员的大小

语法

typedef union 共用体名称
{
 	成员变量
} 别名;

特点

1、同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用
2、共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖
3、共用体变量的地址和它的各成员的地址都是同一地址
4、共用体变量的初始化union data a={123}; 初始化共用体为第一个成员

枚举

概念

将变量的值一一列举出来,变量的值只限于列举出来的值的范围内

枚举类型也是个构造类型的

既然是构造类型的数据类型,就得先定义类型,再定义变量

语法:

enum 枚举类型名
{
 枚举值列表;
};

特点

枚举值是常量,不能在程序中用赋值语句再对它赋值

枚举元素本身由系统定义了一个表示序号的数值,默认是从0开始顺序定义为0,1,2…

可以改变枚举值的默认值

示例1:

#include <stdio.h>
enum week // 枚举类型
{
     mon,
     tue = 3,
     wed,
     thu,
     fri,
     sat,
     sun
     // 注意:最后一个变量后不要加分号
};
int main(int argc, char const *argv[])
{
     enum week w01 = mon;
     printf("mon = %d\n", w01);
     enum week w02 = tue;
     printf("mon = %d\n", w02);
     enum week w03 = wed;
     printf("mon = %d\n", w03);
     /*
     0:财务部
     1:销售部
     2:教学部
     3:...
     */
     return 0;
}

示例2:

#include <stdio.h>
typedef enum BuMen
{
     CaiWu,
     RenShi,
     XiaoShou
} BM;
typedef struct YuanGong
{
     char name[50];
     char sex[10];
     int age;
     double money;
     BM bm;
} YG;
int main(int argc, char const *argv[])
{
     YG yg01 = {"牛马一号", "男", 24, 3200, XiaoShou};
     if (yg01.bm == XiaoShou)
     {
           printf("%s在销售部\n", yg01.name);
     }
     else
     {
           printf("%s不在销售部\n", yg01.name);
     }
     return 0;
}

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

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

相关文章

打字练习神器与基础打字指法

先奉上链接&#xff1a;Learn Touch Typing Free - TypingClub 最近观察到一位计算机的学长打字哒哒哒哒停不下来&#xff0c;研究了一下发现是自己的指法有问题&#xff0c;只能从头开始学起啦。如果刚学打字的朋友们一定要学习指法&#xff0c;打好基础&#xff01; 基础指法…

基于微信小程序的挂号管理系统-小程序端

微信小程序端系统功能实现 登录功能 系统登录功能中&#xff0c;用户只需在登录界面输入正确的用户名和密码&#xff0c;即可快速进入系统。登录功能还采用了先进的加密技术&#xff0c;保障用户信息的安全性&#xff0c;让用户能够放心使用。 注册功能 系统注册功中&#xf…

js数据类型转换-----统一转成字符串String()

String&#xff08;&#xff09; 所有类型都可以转成字符串 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"…

告别无序 10款科研项目管理工具为您的科研之路加速

国内外主流的10 款科研单位科研项目管理系统对比&#xff1a;PingCode、Worktile、Wizard、ShowDoc、Asana、ClickUp、Notion、Wrike、Basecamp、智方科研管理系统。 在选择科研项目管理系统时&#xff0c;许多科研单位都面临着如何找到能够真正满足特定需求的系统这一挑战。市…

HALCON 深度学习异常检测实例

首先你需要下载软件&#xff0c;halcon 20的版本和 Deep Learning Tool 工具 注意了&#xff0c;下载的halcon 必须要专业版的电脑系统&#xff0c;win10或者win11 都可以但是版本必须是专业版的不能是家庭版的 详情可看我另一篇文章 halcon 深度学习软件工具安装以及用法…

《高等代数》行(列)和相等行列式

说明&#xff1a;此文章用于本人复习巩固&#xff0c;如果也能帮助到大家那就更加有意义了。 注&#xff1a;1&#xff09;行&#xff08;列&#xff09;和相等行列式的求解方法是将其于行都加到第一行&#xff08;列&#xff09;&#xff0c;然后再提取第一行 …

Xilinx系ZYNQ学习笔记(一)Vivado使用说明

系列文章目录 文章目录 系列文章目录前言启示界面介绍新建工程主界面RTL分析与描述设计与综合引脚分配约束设计实现比特流文件的下载固化程序 添加源文件 前言 最近买了块xilinx的FPGA进行学习 启示界面介绍 新建工程 主界面 鼠标放在选项上时会出现中文翻译 RTL分析与描述…

基于STM32心电模块学习笔记

一、项目简介 技术原理和优势:通过医疗电子单片机高级开发系统,读取人体生理参数监测系统发送过来的心率和心电导联信息数据包,并对这两个数据包进行解包,最后,将解包之后的心率值和心电导联信息显示在OLED显示屏上,如下图所示。该实验的数据源是人体生理参数监测系统,该…

牛牛替换(c语言)

1.//描述 //牛牛有一个长度为 n 的字符数组&#xff0c;他尝试把字符数组中其中一些字符替换成另一些字符。 //输入描述&#xff1a; //第一行输入一个正整数 n 表示字符数组的长度&#xff0c;四个个字符分别 a1 和 a2 &#xff0c; a3 和 a4&#xff0c; // 表示把字符数组中…

【Unity实战】Visual Studio Debug失败

Visual Studio&#xff0c;就像以前Eclipse在Java领域中的地位一样&#xff0c;至少在Jetbrains人人皆爱之前&#xff0c;它是主流。可能对于当下来说显得臃肿&#xff0c;而且没有Jetbrains智能准确的代码分析提示&#xff0c;但是依旧能用。而且开大工程来说&#xff0c;至少…

内存管理笔记

1、内存管理简介 在计算机系统中&#xff0c;变量、中间数据一般存放在系统存储空间中&#xff0c;只有在实际使用时才将它们从存储空间调入到中央处理器内部进行运算。通常存储空间可以分为两种&#xff1a;内部存储空间和外部存储空间。内部存储空间访问速度比较快&#xff…

【Redis】缓存(上)

为什么要使用缓存&#xff1f; 在日常开发中&#xff0c;通常使用Redis来做MySQL的缓存。究其原因&#xff0c;首先&#xff0c;根据二八定律&#xff0c;20%的数据可以应对80%的请求&#xff1b;其次&#xff0c;对于MySQL这样的关系型数据库来说&#xff0c;性能普遍都不是很…

复习:存储类别内存分配动态分配内存

目录 存储类别说明符 自动变量&#xff08;auto&#xff09; 寄存器变变量&#xff08;register&#xff09; 块作用域的静态变量&#xff08;static&#xff09; 外部链接的静态变量&#xff08;external&#xff09; 内存分配 概念回顾 动态分配内存 malloc函数 free函数 回…

若依框架(前后端分离)增加手机号验证码登录

这篇文章主要介绍了如何在若依架(前后端分离)版本中集成短信验证码登录功能。文章内容包括了前后端的详细实现步骤,并通过代码示例展示了如何生成验证码、验证验证码、验证码登录、自定义的认证处理等功能的实现。 前端部分: 登录界面改造:在现有的登录界面上增加短信验证…

Spring Boot集成google Authenticator实现mfa

1.什么时候mfa&#xff1f; 多重身份验证&#xff08;MFA&#xff09;是多步骤的账户登录过程&#xff0c;它要求用户输入更多信息&#xff0c;而不仅仅是输入密码。例如&#xff0c;除了密码之外&#xff0c;用户可能需要输入发送到其电子邮件的代码&#xff0c;回答一个秘密…

GoodSync - 本地云端备份同步工具

最近几年各种加密勒索软件层出不穷&#xff0c;个人数据受到威胁。如何让风险降到最低&#xff1f;养成好的备份习惯就很重要。 GoodSync 就是你值得信赖的同步备份工具&#xff0c;能够实现多合一管理网盘、文件安全备份或同步。 文件同步、备份好助手 要在多种设备中同步文…

9.1centos安装postgres

目录 一、安装并启动postgres 二、设置允许远程连接 三、重置密码 四、开放防火墙端口 五、重启服务后进入命令行模式 六、远程连接 一、安装并启动postgres # Install the repository RPM: sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpm…

用Python实现时间序列模型实战——Day 7: ARIMA 模型的诊断与调整

一、学习内容 1. 残差分析与模型诊断 残差分析&#xff1a; 在 ARIMA 模型拟合之后&#xff0c;我们需要检查模型残差是否满足白噪声的假设。如果模型残差表现为零均值、方差恒定且无自相关性&#xff0c;这说明模型已经捕捉了时间序列中的主要结构&#xff0c;剩下的残差是…

jarbas 靶机渗透(cms 渗透)

靶机信息 vulnhub 靶机 主机发现 (base) ┌──(root㉿kali)-[/home/kali/testJarbas] └─# sudo nmap -sn 192.168.50.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-28 15:45 CST Nmap scan report for 192.168.50.1 Host is up (0.00023s latency). MAC …

职场真相:在草台班子中寻找自我价值

在踏入社会的那一刻起&#xff0c;我们每个人都怀揣着对未来的无限憧憬与梦想&#xff0c;渴望在职场这个广阔的舞台上绽放光彩。然而&#xff0c;现实往往比理想骨感得多&#xff0c;尤其是在初入职场的几年里&#xff0c;那些曾经以为的“精英团队”、“完美计划”逐渐被现实…