最近,我看到了一些很棒的东西。
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
[基本上,我知道这个宏在做什么。但是有一件事我无法理解。
为什么我们可以将0
转换为指针类型(struct)并访问其成员?我已经有referenced一些类似的东西,并且0
似乎是空指针。那么为什么我们可以强制转换为空指针然后访问其成员呢?
在您列出的代码示例中,它在typeof
中强制转换为0。但是typeof
不是函数,它是一个运算符。您正在访问它的类型,而不是它的值。