(size_t)&(((s *)0) - > m)中的(s *)0是什么意思

时间:2013-07-16 11:37:38

标签: c++

这是stddef.h中的一系列宏之一。

#define offsetof(s,m)   (size_t)&(((s *)0)->m)

(s *)0是什么意思?

6 个答案:

答案 0 :(得分:7)

这是一种编写NULL类型pointer-to-s指针的方法。通过获取地址为0的m s成员的地址,您可以在m内获得s的偏移量。

答案 1 :(得分:3)

这是一种类型转换,将0转换为pointer to s

答案 2 :(得分:0)

它是s指针的强制转换。在这种情况下,s是宏的一个参数,希望是类型名称。

答案 3 :(得分:0)

创建类型为s且值为零(null)

的指针

答案 4 :(得分:0)

应该是一个类型名称,例如int,因此(s*)0基本上是将0转换为指针类型。

答案 5 :(得分:0)

0不仅是整数零,还是空指针。因此((S*)0)将空指针强制转换为指向s的指针(其中s可能是结构)。