注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。

本课时主要实现了一个宏,该宏用于将指向结构体变量中某成员的指针,转换为指向该结构体变量的指针。。

主要内容

本课时的重点在于理解如下宏,这里再用文字的方式再次解释一下。

define offset_in_parent(parent_type, node_name) ((uint32_t)&(((parent_type*)0)->node_name))

该宏计算某个结构体成员相对于整个结构体中的偏移量(字节计)。
((parent_type)0)用于获得一个指向地址0处的parent_type类型的指针。为了访问该结构体中的node_name成员,可以使用表达式((parent_type)0)->name,而要获取其地址,可以再使用取地址符&((parent_type)0)->name。
显然,**name相对于整个结构体开始的地址偏移量应当为:((parent_type
)0)->name的地址 - ((parent_type)0)的地址。而由于((parent_type)0)的地址即为0,所以偏移量就等于((parent_type)0)->name的地址。*
有了这个宏,就可以通过视频中所介绍的另外两个宏转换得到结构体的指针。这些转换比较简单,此处略。

参考资料