手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

如何理解c语言结构体offsetof计算成员偏移量

时间:2024-10-13 23:31:47

1、定义双端队列:队列中只定义了前后指针,其他值都没有定义。只是包含了核心的队列功能。

如何理解c语言结构体offsetof计算成员偏移量

2、双端队列的初始化,添加,删除操作

如何理解c语言结构体offsetof计算成员偏移量

3、提供队列的宏定义函数:获取队列项中值,遍历队列。这里最重要的就是获取队列值的宏定义函数,在该宏定义中再使用偏移量的宏定义计算。

如何理解c语言结构体offsetof计算成员偏移量

4、计算offset的意义:获取到当前成员的地址后,再减去成员的相对于结构体的偏移量,得到结构体的地址。我们看具体的使用例子:

如何理解c语言结构体offsetof计算成员偏移量
如何理解c语言结构体offsetof计算成员偏移量

5、笔者学习这段逻辑一开始也没搞懂,我们展开示麻质跹礼例中调用宏定义的用法,最终能发现这种用法:对0做强制转换为结构体指针,并获取该结构体中相应成员的指针。这种用法太少见了!

如何理解c语言结构体offsetof计算成员偏移量

6、c语言中0与NULL结果是一样的,所以这里计算偏移量时,首先将NULL指针强制转换为对应结构体指针,然后再取该结构体中成员地址。使用NULL指针来访问成员是非法的,但获取地址时,编译器能识别转换为计算偏移量。

如何理解c语言结构体offsetof计算成员偏移量

7、通过实例中如何使用队列,我们可以发现这里实现的队列包含了队列头结构。该结构用来标记队列开始与结束,但该节点并不计算到队列范围内。学习本开源代码,真的太精练了。

如何理解c语言结构体offsetof计算成员偏移量

8、最后,我们写一个简单的计算结构体中成员偏移量的验证程序。我们验证通过NULL指针计算成员地址的逻辑。

如何理解c语言结构体offsetof计算成员偏移量
如何理解c语言结构体offsetof计算成员偏移量
© 手抄报圈