1、定义双端队列:队列中只定义了前后指针,其他值都没有定义。只是包含了核心的队列功能。
2、双端队列的初始化,添加,删除操作
3、提供队列的宏定义函数:获取队列项中值,遍历队列。这里最重要的就是获取队列值的宏定义函数,在该宏定义中再使用偏移量的宏定义计算。
4、计算offset的意义:获取到当前成员的地址后,再减去成员的相对于结构体的偏移量,得到结构体的地址。我们看具体的使用例子:
5、笔者学习这段逻辑一开始也没搞懂,我们展开示麻质跹礼例中调用宏定义的用法,最终能发现这种用法:对0做强制转换为结构体指针,并获取该结构体中相应成员的指针。这种用法太少见了!
6、c语言中0与NULL结果是一样的,所以这里计算偏移量时,首先将NULL指针强制转换为对应结构体指针,然后再取该结构体中成员地址。使用NULL指针来访问成员是非法的,但获取地址时,编译器能识别转换为计算偏移量。
7、通过实例中如何使用队列,我们可以发现这里实现的队列包含了队列头结构。该结构用来标记队列开始与结束,但该节点并不计算到队列范围内。学习本开源代码,真的太精练了。
8、最后,我们写一个简单的计算结构体中成员偏移量的验证程序。我们验证通过NULL指针计算成员地址的逻辑。