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

012+limou+C语言深入知识——(4)“结构体”与“枚举体”与“联合体”

一、结构体

1、结构体基础

(1)结构体完全声明

struct tag
{member-list;
}variable-list;
//描述一个人
struct people
{char name[10];//人名int age;//年龄int idnumber;//身份证
};

(2)结构体不完全声明(匿名结构体)

struct
{member-list;
}variable-list;
  • 值得注意的是一个匿名结构体就是一个单独的类型,不同地方定义的匿名结构体的类型在编译期看来是两种类型,会给出警告

在这里插入图片描述

2、结构体自引用

有时候需要通过结构体变量内部成员找到同类型的结构体变量,这就叫结构体的自引用

(1)错误引用

struct Node
{int data;struct Node next;
};

(2)正确引用

struct Node
{int data;struct Node* next;
};

(3)使用typedef引用

typedef struct Node
{int data;struct Node* next;//注意不能写成Node* next
}Node;
  • 注意不要写成Node*,因为在typedef{…}Node;后才会将结构体改名为Node,在此之前Node这种类型是不存在的

3、结构体变量的初始化

  • 使用{}初始化
//描述一个人
typedef struct people
{char name[10];//人名int age;//年龄int idnumber;//身份证
}people;int main()
{people a = { "limou3434", 30, 44443333 };printf("%s %d %d", a.name, a.age, a.idnumber);return 0;
}
  • 另外结构体有初始化器
//描述一个人
typedef struct people
{char name[10];//人名int age;//年龄int idnumber;//身份证
}people;int main()
{people a = { "limou3434", 30, 44443333 };printf("%s %d %d\n", a.name, a.age, a.idnumber);people b = { .age = 20, .idnumber = 1234567890, .name = "limou" };printf("%s %d %d\n", b.name, b.age, b.idnumber);return 0;
}

4、结构体内存大小

(1)内存对齐计算规则

(2)VS默认对齐数

(3)修改默认对齐数

详细看另外一篇文章额外:结构体内存对齐

(4)偏移量计算宏

#include <stdio.h>
#include <stddef.h>//使用offsetof宏,要包含头文件stddef.h
typedef struct people
{char name[10];//人名int age;//年龄int idnumber;//身份证
}people;
int main()
{people s = { "limou", 12, 88888888 };printf("%zd %zd %zd", offsetof(people, name), offsetof(people, age), offsetof(people, idnumber));
}

(5)节省结构体空间

将小的类型集中在一起就会一定程度节省结构体的空间

5、结构体位段

(1)位段基础位段的声明和结构是类似的,有两个不同:

①位段的成员必须是“整型算术类型”:int、unsigned int、signed int、char等
②位段的成员名后边有一个冒号和一个数字

//位段例子,后面的数字代表存储的比特位
struct A
{int a:2;int b:5;int c:10;int d:30;
};

(2)位段内存分配

  • 位段的空间是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的,每次为每个成员分配比特位

(3)位段跨平台

  • 位段涉及很多不确定因素
    • ①C标准在未被利用的空间这里,并未规定如何处理
    • ②在一个字节中,由于成员都会使用这段空间,所以成员之间的存放先后顺序也是不确定的
    • ③成员分配最大位的数目是没有办法确定的
    • ④int位段是被当成无符号还是有符号也同样是不确定的
  • 因此位段是不跨平台的,注重可移植的程序应该避免使用位段

(4)位段应用

位段主要是用在网络数据传输上,这点涉及较远,暂且不谈

二、枚举体

1、枚举体基础

enum 枚举名
{枚举成员1,枚举成员2,…枚举成员n
}

2、枚举体特点

枚举成员的值,从0开始一次递增1。也可以直接在枚举体内进行赋值,赋值成员后的成员,比赋值成员的值大1

3、枚举体使用

//一个枚举体的例子
#include <stdio.h>
enum Color//颜色
{RED,YELLOW,GREEN=6,BLUE
};
int main()
{enum Color c = BLUE;//注意最好不要直接赋7,这在C语言可能被允许,但是在C++上可能会提示类型错误,因为1是int类型,而enum Color是一种枚举体类型printf("%d\n", c);printf("%d %d %d %d\n", RED, YELLOW, GREEN, BLUE);
}

4、枚举的优点

①有类型检查
②比宏更加便于调试
③使用方便,一次定义多个常量
④代码可读性提高

相关文章:

012+limou+C语言深入知识——(4)“结构体”与“枚举体”与“联合体”

一、结构体 1、结构体基础 &#xff08;1&#xff09;结构体完全声明 struct tag {member-list; }variable-list;//描述一个人 struct people {char name[10];//人名int age;//年龄int idnumber;//身份证 };&#xff08;2&#xff09;结构体不完全声明&#xff08;匿名结构体…...

Canvas百战成神-圆(1)

Canvas百战成神-圆 初始化容器 <canvas id"canvas"></canvas>canvas{border: 1px solid black; }让页面占满屏幕 *{margin: 0;padding: 0; } html,body{width: 100%;height: 100%;overflow: hidden; } ::-webkit-scrollbar{display: none; }初始化画笔…...

详解分库分表设计

详解分库分表设计 背景 ​ 在传统的单机数据库架构中&#xff0c;所有数据都存储在同一个数据库中&#xff0c;随着业务规模的不断扩大&#xff0c;数据量和并发量也会越来越大&#xff0c;这会给数据库的性能和可用性带来挑战。此外&#xff0c;当单机数据库的容量达到瓶颈时…...

动态规划-基础(斐波那契数、爬楼梯、使用最小花费爬楼梯、不同路径、不同路径II、整数拆分、不同的二叉搜索树)

动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的。动态规划问题&#xff0c;五步走&#xff1a;状态定义&am…...

深入理解WebSocket协议

“ 一直以来对WebSocket仅停留在使用阶段&#xff0c;也没有深入理解其背后的原理。当看到 x x x was not upgraded to websocket&#xff0c;我是彻底蒙了&#xff0c;等我镇定下来&#xff0c;打开百度输入这行报错信息&#xff0c;随即看到的就是大家说的跨域&#xff0c;或…...

Vector的扩容机制

到需要扩容的时候&#xff0c;Vector会根据需要的大小&#xff0c;创建一个新数组&#xff0c;然后把旧数组的元素复制进新数组。 我们可以看到&#xff0c;扩容后&#xff0c;其实是一个新数组&#xff0c;内部元素的地址已经改变了。所以扩容之后&#xff0c;原先的迭代器会…...

22讲MySQL有哪些“饮鸩止渴”提高性能的方法

短连接风暴 是指数据库有很多链接之后只执行了几个语句就断开的客户端&#xff0c;然后我们知道数据库客户端和数据库每次连接不仅需要tcp的三次握手&#xff0c;而且还有mysql的鉴权操作都要占用很多服务器的资源。话虽如此但是如果连接的不多的话其实这点资源无所谓的。 但是…...

10.0自定义SystemUI下拉状态栏和通知栏视图(六)之监听系统通知

1.前言 在进行rom产品定制化开发中,在10.0中针对systemui下拉状态栏和通知栏的定制UI的工作开发中,原生系统的下拉状态栏和通知栏的视图UI在产品开发中会不太满足功能, 所以根据产品需要来自定义SystemUI的下拉状态栏和通知栏功能,首选实现的就是下拉通知栏左滑删除通知的部…...

怎样在外网登录访问CRM管理系统?

一、什么是CRM管理系统&#xff1f; Customer Relationship Management&#xff0c;简称CRM&#xff0c;指客户关系管理&#xff0c;是企业利用信息互联网技术&#xff0c;协调企业、顾客和服务上的交互&#xff0c;提升管理服务。为了企业信息安全以及使用方便&#xff0c;企…...

Activity工作流(三):Service服务

3. Service服务 所有的Service都通过流程引擎获得。 3.1 RepositoryService 仓库服务是存储相关的服务&#xff0c;一般用来部署流程文件&#xff0c;获取流程文件&#xff08;bpmn和图片&#xff09;&#xff0c;查询流程定义信息等操作&#xff0c;是引擎中的一个重要的服务。…...

算法--最长回文子串--java--python

这个算法题里面总是有 暴力解法 把所有字串都拿出来判断一下 这里有小小的优化&#xff1a; 就是当判断的字串小于等于我们自己求得的最长回文子串的长度&#xff0c;那么我们就不需要在进行对这个的判断这里的begin&#xff0c;还可以用来取得最小回文子串是什么 java // 暴…...

ElasticSearch-第二天

目录 文档批量操作 批量获取文档数据 批量操作文档数据 DSL语言高级查询 DSL概述 无查询条件 叶子条件查询 模糊匹配 match的复杂用法 精确匹配 组合条件查询(多条件查询) 连接查询(多文档合并查询) 查询DSL和过滤DSL 区别 query DSL filter DSL Query方式查…...

【AI大比拼】文心一言 VS ChatGPT-4

摘要&#xff1a;本文将对比分析两款知名的 AI 对话引擎&#xff1a;文心一言和 OpenAI 的 ChatGPT&#xff0c;通过实际案例让大家对这两款对话引擎有更深入的了解&#xff0c;以便大家选择合适的 AI 对话引擎。 亲爱的 CSDN 朋友们&#xff0c;大家好&#xff01;近年来&…...

美团笔试-3.18

1、捕获敌人 小美在玩一项游戏。该游戏的目标是尽可能抓获敌人。 敌人的位置将被一个二维坐标 (x, y) 所描述。 小美有一个全屏技能&#xff0c;该技能能一次性将若干敌人一次性捕获。 捕获的敌人之间的横坐标的最大差值不能大于A&#xff0c;纵坐标的最大差值不能大于B。 现在…...

【12】SCI易中期刊推荐——计算机信息系统(中科院4区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…...

好不容易约来了一位程序员来面试,结果人家不做笔试题

感觉以后还是不要出面试题这环节好了。好不容易约来了一位程序员来面试。刚递给他一份笔试题&#xff0c;他一看到要做笔试题&#xff0c;说不做笔试题&#xff0c;有问题面谈就好了&#xff0c;搞得我有点尴尬&#xff0c;这位应聘者有3年多工作经验。关于程序员岗位&#xff…...

这几个过时Java技术不要再学了

Java 已经发展了近20年&#xff0c;极其丰富的周边框架打造了一个繁荣稳固的生态圈。 Java现在不仅仅是一门语言&#xff0c;而且还是一整个生态体系&#xff0c;实在是太庞大了&#xff0c;从诞生到现在&#xff0c;有无数的技术在不断的推出&#xff0c;也有很多技术在不断的…...

EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)

1、前言 (1)本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法&#xff0c;包含底层时序和读写的代码&#xff1b; (2)大部分代码是EEPROM芯片通用的&#xff0c;但是其中关于某些时间的要求&#xff0c;是和具体芯片相关的&#xff0c;和主控芯片和外设芯片都有关系&…...

Django4.0新特性-主要变化

Django 4.0于2021年12月正式发布&#xff0c;标志着Django 4.X时代的来临。参考Django 4.0 release notes | Django documentation | Django Python 兼容性 Django 4.0 将支持 Python 3.8、3.9 与 3.10。强烈推荐并且仅官方支持每个系列的最新版本。 Django 3.2.x 系列是最后…...

MySQL高级面试题整理

1. 执行流程 mysql客户端先与服务器建立连接Sql语句通过解析器形成解析树再通过预处理器形成新解析树&#xff0c;检查解析树是否合法通过查询优化器将其转换成执行计划&#xff0c;优化器找到最适合的执行计划执行器执行sql 2. MYISAM和InNoDB的区别 MYISAM&#xff1a;不支…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理&#xff1a;检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目&#xff1a;RankRAG&#xff1a;Unifying Context Ranking…...