C 语言自定义类型基础知识

结构体

结构体的访问形式

  1. 定义的结构体指针->结构体成员
  2. 定义的结构体名称.结构体成员

结构体的内存对齐原则

  1. offsetof 可以测量结构体成员的偏移量,格式:5698be65357b4622b70de61df0740078.jpg逗号前是结构体名称,逗号后是结构体成员
  2. 结构体的对齐的内存对齐原则a3f8f54d5f8b4856aed95784ad907dca.jpg注意:对齐数取 默认对齐数 和 该成员占用大小的较小值:gcc 编译器无默认对齐数
  3. 也可以修改默认对齐数使用#pragma()c634c984780f4ec2a2f63c8a6677686f.jpg
  4. 例题:ef01935354f6480f80f092b711fd834e.jpg在这里 s3 占用字节大小为 8+4+4=16;s4 占用字节为 8+16+8=32
  5. 结构体内存对齐的原因:主要是为了提高内存访问效率。为了理解:先要明白,计算机 32 (64) 位机的含义,他可以指指针的二进制位数是 32(64)位,他也指计算机内存一次性读取的二进制数据位数。所以再来理解这个结构体对齐与不对齐的区别210809af62f84065842ceacd3790400f.jpg内存不对齐时,需要读取两次才能完整读取到整型 i 的内容,而内存对齐时,可以一次性读取。
  6. 为了节省空间:可以把占用内存小的变量都集中定义在结构体的一个位置。

拾遗

  1. 结构体最好使用传址调用,因为传值可能由于结构体内存过大导致程序效率降低,只是可能会导致结构体内容在函数中被修改,不安全。
  2. 结构体可以实现位端但由于其跨平台问题较多,这里不进行讲解只留下例子2b8fc66258be4bb3ad72f7ce66308dea.jpg

f7f089bf9f384aea9bf702dbb77d121d.jpg 

 枚举类型

  1. 枚举类型是一种常量c8fd8701a11345b19cbd05aa222c34eb.jpg
  2. 枚举的定义形式e022f8e7de934a8b829a277675982dac.jpg注意,枚举常量之间使用逗号隔开,其中默认从上到下每个常量的数值为0,1,2,3,4…;实际上枚举常量都是占四个字节的int常量(vs2022中)
  3. 可以给枚举常量在定义时进行赋值,若有部分不进行赋值,从该元素的下一元素开始每一个都会比上一个多1;不能在定义枚举的其他地方对枚举变量进行赋值,因为枚举常量实际上就是一个常用的整型使用了一个可读性强的名字
  4. 类似于最简单的#define,只是把定义的内容都放在了一起。主要作用在于提高代码的可读性。

联合体(共用体)

  1. 联合体最大的特点是其中的成员共用同一块空间,因此改变任意一个成员都有可能造成其他成员的改变。
  2. 一个巧妙的判断大小端的设计75eb952ce84342309b9eb67fa82b5a22.jpg

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值