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

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 

 

 

 

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

絕知此事要躬行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值