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

【C语言进阶】结构体类型目录 1 结构体类型 2 匿名结构体类型 3 结构体的自引用 4 结构体的 typedef 5 结构体类型的初始化 6 结构体的内存对齐 7 内存对齐的原因 8 修改默认对齐数 9 offset 取偏移量 10 结构体传参 1 结构体类型 内置类型 char int short

大家好,我是讯享网,很高兴认识大家。

目录

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

 

 

 

 

小讯
上一篇 2025-02-25 21:58
下一篇 2025-03-04 20:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/49503.html