首页 > 解决方案 > ((Struct*)0) 是什么意思?

问题描述

我在阅读一段 C 代码时遇到了问题。代码显示如下:

#define size_of_attribute(Struct, Attribute) sizeof(((Struct*)0)->Attribute)

这个宏函数的作用是获取结构中属性的长度。我知道这个函数是干什么用的,但我不明白“ ((Struct*)0)”的意思。

如果你能给我一些解释,我会安抚:)。

标签: cpointers

解决方案


常量值0有资格作为空指针常量。因此,该表达式(Struct*)0将该空指针常量转换为类型的指针Struct *。然后表达式获取Attribute成员。

尝试评估((Struct*)0)->Attribute将导致空指针延迟,但是此表达式是sizeof运算符的参数。这意味着表达式实际上并没有被评估,而是简单地检查以确定它的类型。

因此,您无需拥有该类型的对象即可为您提供命名结构成员sizeof(((Struct*)0)->Attribute)的大小。AttributeStruct


推荐阅读