栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言进阶】结构体类型

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言进阶】结构体类型

目录

1. 结构体类型

2. 匿名结构体类型

3. 结构体的自引用

4. 结构体的 typedef

5. 结构体类型的初始化

6. 结构体的内存对齐

7. 内存对齐的原因 

8. 修改默认对齐数

9. offset 取偏移量

10. 结构体传参


1. 结构体类型

内置类型:char、int、short、float

自定义类型:结构体类型、枚举类型、联合体类型

结构体类型:

创建结构体类型:

2. 匿名结构体类型

省略了结构体标签(名字),那么需要在后面创建结构体变量sa,否则以后没法使用这个结构体

3. 结构体的自引用

这样写法是错误的,因为无法计算出Node的大小 。

修改一下:

这样是可以的,因为指针的大小是 4/8 ,可以计算出Node的大小

4. 结构体的 typedef

将 struct Node 重新定义为 Node 

此时,Node 是类型名字,不是定义的全局变量

5. 结构体类型的初始化

6. 结构体的内存对齐

1. 结构体成员的对齐数:取默认的对齐数和这个成员的较小值

2. 结构体的总大小:最大对齐数的整数倍

3. 结构体嵌套的时候:

  • 对齐数是自己内部成员最大对齐数的整数倍
  • 总大小是自己内部最大对齐数和外部最大对齐数的较大值的整数倍处

 练习:

答案:16

 

7. 内存对齐的原因 

例如:

  • 32位机器:32根地址线、32根数据线
  • 那么读c就会读4个字节,只需要读取一次
  • 但是读a的时候,就需要读取两次拼接起来

  • 但是浪费掉char c后面的空间的话,读取int a就只需要读取一次

  •  结构体内存的对齐,就是拿空间换取时间

8. 修改默认对齐数
  • #pragma pack(4)      // 设置默认对齐数为4
  • #pragma pack()        //  取消设置的默认对其数

9. offset 取偏移量

offset(抵消) 可以求出结构体偏移量

需要头文件 stddef.h 

第一个参数:结构体类型名

第二个参数:要求取的成员变量 

 

10. 结构体传参

推荐结构体 传址 调用,防止内存消耗过大

为了防止传地址被改变,可以形参加个 const

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号