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

news/2024/12/28 8:36:09/

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.ppmy.cn/news/11240.html

相关文章

Java文件IO操作

目录 一、了解什么是文件 狭义的文件: 广义的文件: 二、文件的路径 ①文件的绝对路径 ②文件的相对路径 三、Java对于文件的操作 File类的构造方法 File类的普通方法 四、对于文件的内容操作 ①FileInputStream(文件输入流&#xf…

【计算机视觉】Pooling层的作用以及如何进行反向传播

问题 CNN网络在反向传播中需要逐层向前求梯度,然而pooling层没有可学习的参数,那它是如何进行反向传播的呢? 此外,CNN中为什么要加pooling层,它的作用是什么? Pooling层 CNN一般采用average pooling或max pooling来进行池化操作,而池化操作会改变feature map的大小,…

Esp8266+TFT太空人天气时钟

开源项目,只对动手能力有要求,有现成程序 b站演示视频: https://www.bilibili.com/video/BV1ND4y1W7oS/?spm_id_from333.999.0.0 效果图 模块和接线方法 使用ESP8266-12F模块,4M空间。OLED使用1.3寸IPS 240*240点阵彩屏,ST7789…

接口协议之抓包分析 TCP 协议

TCP 协议是在传输层中,一种面向连接的、可靠的、基于字节流的传输层通信协议。环境准备对接口测试工具进行分类,可以如下几类:网络嗅探工具:tcpdump,wireshark代理工具:fiddler,charles&#xf…

盘点| 能够实现小程序开发提效的框架/工具有这些

近年来,为了研发效率的提升,技术高频革新,开发者们纷纷表示:“好是好,就是快学不动了!”。开发者们在不断学习新语言、框架、工具等内容的同时,也在担心所学是否真正有用。而小程序其实能够帮助…

Elasticsearch:运用 Go 语言实现 Elasticsearch 搜索 - 8.x

在我之前的文章 “Elasticsearch:Go 客户端简介 - 8.x”,我对 Elasticsearch golang 客户端做了一个简单的介绍。在今天的这篇文章中,我将详细介绍如何使用这个客户端来一步一步地连接到 Elasticsearch,进而创建索引,搜…

杰卡德相似度(Jaccard)详解及在UserCF中的应用

1、杰卡德相似度(Jaccard) 这个是衡量两个集合的相似度一种指标。 两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示 另一种表示的方法: jaccard系数衡量维度相似性 jaccard系数很…

Java调用WebService接口之利用hutool工具包实现

最近要对接金蝶财务系统,对方提供了一个webService接口。而且测试接口地址还是内网的,每改一处代码都要部署堡垒机去测试,光是一个登录接口就花了我两天时间很是无语(主要是接口文档地址不会看) 接口的地址大就是这种…