为什么将零强制转换为指针类型并访问其成员工作?

问题描述 投票:1回答:1

最近,我看到了一些很棒的东西。

#define container_of(ptr, type, member) ({                      \
const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
(type *)( (char *)__mptr - offsetof(type,member) );})

[基本上,我知道这个宏在做什么。但是有一件事我无法理解。

为什么我们可以将0转换为指针类型(struct)并访问其成员?我已经有referenced一些类似的东西,并且0似乎是空指针。那么为什么我们可以强制转换为空指针然后访问其成员呢?

c
1个回答
0
投票

在您列出的代码示例中,它在typeof中强制转换为0。但是typeof不是函数,它是一个运算符。您正在访问它的类型,而不是它的值。

参考此问题:Why is typeof null "object"?

© www.soinside.com 2019 - 2024. All rights reserved.