自定义类型:结构体,枚举,联合(1)

news2025/1/16 16:53:27

tips

1. 

2.  

结构基础知识复习

1. 结构是一些值的集合这些值被称为成员变量,结构的每个成员可以是不同类型的变量。 

2. 结构体类型结构体成员结构体变量结构体指针创建方式 

3. 初始化结构体变量的时候,如下红色箭头是不对的,黄色箭头才是对的

4. 结构体指针两种操作与两种访问结构体成员的方式 

*结构体指针得到结构体变量    结构体指针->结构体成员名访问到结构体成员 

 通过结构体变量.结构体成员名也能访问到结构体成员 

5. 利用typedef对结构体类型名称进行简化 

特殊的声明结构体类型(匿名结构体类型)

1. 在声明结构的时候,可以不完全的声明

2. 也就是说在声明的时候省略掉了结构体标签

3. 对于匿名结构体类型,用了一次之后就不能用了 

4. 因此必须要在创建结构体类型的时候就顺带着直接创建结构体变量 ,同时初始化的话也一次性搞定

 

结构体的自引用 

1. 结构的自引用。我们在实现有一些代码的时候.....    首先来一些陌生的知识。链表:是一种数据结构,数据结构是啥?数据结构就是数据在内存中存储的结构,比方说现在我有一堆数据,我要把它们放进内存里面去,我在内存里面存储这堆数据的结构就叫做数据结构。比方说我要把1.2.3.4.5存起来,我可以就搞一个连续的空间(数组)把1.2.3.4.5给存起来;我也可以这样子存放: 

 2.  3. 4.好好静下心来耐心读一读吧

5. 错误示范:

6. 正确示范:

7. 结构体的自引用与typedef结合需要注意:(一个错误示范,一个正确示范)

结构体变量的定义与初始化

1. 结构体初始化与数组初始化类似,用一个{},因为你的结构体成员有不止一个的。
2. 其实结构体的初始化可以更为灵活,如果你不想按照结构体成员的顺序来进行初始化(乱序初始化),{  . 结构体成员=初始化内容}里面就这样。 

3. 结构体的嵌套初始化某些不正确的初始化结构体变量的形式请看上面的结构体基础知识复习(大标题) 

结构体内存对齐 

1. 结构体里面数据的存放结构体成员变量空间的开辟不能简单地按照它自身的大小然后连续来存放。
2.其实是按照一定的结构体内存对齐的规则存放到内存里面去的

结构体内存对齐规则其实本质就是在讨论结构体在内存里面是如何存的,如何计算它的大小的

3. 规则如下:

练习1:

附:练习2:

附: 

练习3: 

附: 

练习4:  

附:

结构体内存对齐存在的原因 

1. 平台原因(移植原因):
不是所有的硬件平台
都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特
定类型的数据
,否则抛出硬件异常。 

2. 性能原因:
数据结构(尤其是栈)应该尽可能地在自然边界上对齐
原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访
问。
 

3. 总体来说:
结构体的内存对齐是拿空间来换取时间的做法

怎么去验证上述结构体内存对齐呢

1. 在C语言中有一个宏,叫做offsetof,这个宏是用来计算一个结构体成员相较于其起始位置的偏移量的。
2. 这个宏第一个传的是结构体类型,再传结构体成员
3. 在使用宏的时候需要去引用它的头文件,它的头文件是stddef.h 

 

 

 

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

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

相关文章

华为开源自研AI框架昇思MindSpore应用实践:FGSM网络对抗攻击

目录一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例二、对抗样本定义三、攻击方法快速梯度符号攻击(FGSM)四、数据处理五、训练LeNet网络六、实现FGSM七、运行攻击近年来随着数据、计算能力、理论的不断发展演进,深度学习在图…

老板要求总部-分部异地组网,作为IT运维怎样才能避免踩坑?

最近在开年会,老板提出2023年要全面搭建30个分公司的广域网架构,总部和分公司网络实现统一管理。但是公司原有网络架构复杂,各分支又是不同运营商接入的现状,想要实现异地组网并不容易!然而,老板还不断提出…

好用的基于vue的组织架构图组件

都是基于vue的组织架构图,有支持vue2.x和vue3.x,可自行选择使用 一、vue-okr-tree(支持vue2) 文档地址:vue2-okr-tree 这个文档里面只有使用方法,不像vue3-tree-org里面有详细的介绍和安装引入教程 1.安装与引入 n…

第一章 spring框架概述

1.Spring框架概述*Spring是轻量级的开源的JavaEE框架*可以解决企业应用开发的复杂性*有两个核心的部分:IOC、AOPIOC:控制反转,把创建对象的过程交给Spring进行管理AOP:面向切面,不修改源代码的情况下进行功能的增加*Sp…

ThreadLocal与nheritableThreadLocal的区别及使用

ThreadLocal 多线程环境中,共享变量的并发修改常常导致线程同步问题,ThreadLocal可以存储线程私有的本地变量,从而使线程之间的变量相互隔离 因为ThreadLocal在线程执行的上下文可以传递变量的特性,所以可以很好的解决变量值传递…

PostgreSQL11 | pgsql建表、改表与删表

上一篇文章 PostgreSQL11 | pgadmin4基本使用http://t.csdn.cn/PKpde已经讲解了最简单的pgadmin的数据库创建、外键等可视化的操作,以及对应的pgsql语句 这一篇文章将讲解基础的pgsql语句 建表、改表与删表 目录 建表、改表与删表 创建数据表 单字段主键 多…

12.0、VMware-Linux部署springboot项目(图文超详细教程)

12.0、VMware-Linux部署springboot项目(图文超详细教程) 第一步:启动 Linux 进入 root 用户,打开终端 输入以下命令 -> 查看 Linux 中是否已经装有 jdk ; java -version 1.如果有,需要先将原来的 jdk …

ESP-IDF:使用multimap和vector容器给新员工随机分配部门并按照部门打印

例程&#xff1a; /* 创建5个员工&#xff0c;给5个员工随机分配部门&#xff0c;然后按照部门打印员工*/ #include #include #include #include <time.h> #define SALEDEPARTMENT 1 #define RDDEPARTMENT 2 #define MEDEPARTMENT 3 class worker { public: string …

10分钟做好 Bootstrap Blazor 的表格组件导出 Excel/Word/Html/Pdf

上篇: Bootstrap Blazor 实战 通用导入导出服务(Table组件) 1.新建工程 新建工程b14table dotnet new blazorserver -o b14table将项目添加到解决方案中&#xff1a; dotnet sln add b14table/b14table.csproj使用 nuget.org 进行 BootstrapBlazor 组件安装, FreeSql sqlite…

在线阅读网站|基于Springboot+Vue开发实现小说阅读网站

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

探索SpringMVC-HandlerAdapter之RequestMappingHandlerAdapter

前言 在RequestMappingHandlerAdapter的第一篇文章《探索SpringMVC-HandlerAdapter之RequestMappingHandlerAdapter-参数解析》我们从方法调用的角度提出了三个问题。前面两篇分别回答了方法入参、返回值处理这两个问题。而第三个问题则是由异常处理器负责的&#xff0c;不属于…

栈的讲解及实现(图解+代码/C语言)

今天为大家分享的是栈的模拟实现&#xff0c;本文主要讲解如何以数组的形式模拟实现&#xff0c;同时给出链表模拟实现栈的代码。 目录 图解栈的结构数组模拟栈的分步实现 创建并初始化入栈检测栈是否为空出栈获取栈顶元素获取栈内有效元素个数销毁栈 链表模拟实现栈 模拟思…

学习笔记:统计建模方法的比较分析

前言本文介绍了隐马尔可夫模型 (HMM)、最大熵马尔可夫模型 (MEMM) 和条件随机场 (CRF) 的比较分析。 HMM、MEMM 和 CRF 是三种流行的统计建模方法&#xff0c;通常应用于模式识别和机器学习问题。 让我们更详细地探讨每种方法。一、隐马尔可夫模型 (HMM)“隐藏”一词象征着只有…

node ~ zip压缩 文件加密

我们知道zip压缩,文件加密都是基于http的,下面我用用node实现着几个功能 zip压缩/解压 let zlib require(zlib); // 核心 let path require(path); let fs require(fs);// 压缩流 将1.txt压缩成1.txt.gz function gzip(source){ //source文件目录let gzip zlib.createGzi…

[Android]View的事件分发机制(源码解析)

目录 1.分发对象-MotionEvent 2.如何传递事件 1.传递流程 2.事件分发的源码解析 3.主要方法&#xff1a; 4.事件传递中listener 5.滑动冲突如何用事件分发处理 1.分发对象-MotionEvent 事件类型有&#xff1a; 1.ACTION_DOWN-----手指刚接触屏幕 2.ACTION_MOVE------手…

ASIC和FPGA,选择哪种设计比较好?

很多人都觉得同样都是写Verilog的&#xff0c;ASIC和FPGA其实并没有什么区别&#xff0c;其实并不是这样。那么ASIC和FPGA&#xff0c;选择哪种设计比较好&#xff1f;接下来IC修真院就来为大家细细分析。 ASIC (Application Specific Integrated Circuit)&#xff0c;即专用集…

盘点:2022年勒索金额超百万美元的攻击事件

1、哥斯达黎加政府 勒索赎金&#xff1a;2000万美元 这是2022年最受关注的攻击事件&#xff0c;因为这是一个国家首次宣布进入“国家紧急状态”以应对勒索软件攻击。调查显示&#xff0c;从4月中旬到5月初&#xff0c;27个政府机构成为第一波攻击活动的目标。国家财政部数TB数…

生物化学 SY001盘尼西林

盘尼西林的发现与作用原理 发现历史略 青霉素 青霉素Penicillinβ&#xff0d;内酰胺类抗生素&#xff08;β&#xff0d;lactams&#xff09;青霉素类抗生素水溶性好&#xff0c;血消除半衰期大多不超过2小时音译盘尼西林抑制胞壁粘肽合成酶&#xff0c;从而使细菌胞壁缺损…

MOS管的<控制电路>与<防反接电路>

为了方便记忆&#xff0c;我不管D与S&#xff0c;只说MOS管中的二极管方向。 另外G是控制端 这是一篇只管结果的文章&#xff0c;大家只要记住就行。 懂原理vs记结果 懂原理以分析一切现象&#xff0c;但每次使用都要分析一次&#xff1b; 记结果方便使用&#xff0c;但出现问题…

1.1.1-了解什么是计算机

文章目录1 什么是计算机2 计算机硬件3 计算机软件3.1 应用软件3.2 系统软件3.3 主流的电脑操作系统有哪些4 Linux系统4.1 Linux系统介绍4.1 Linux系统版本5 计算机语言5.1 机器语言5.2 汇编语言5.3 人机交互6 计算机操作命令-DOS命令1 什么是计算机 计算机全称&#xff1a;电子…