c - ((Struct*)0) 是什么意思?
问题描述
我在阅读一段 C 代码时遇到了问题。代码显示如下:
#define size_of_attribute(Struct, Attribute) sizeof(((Struct*)0)->Attribute)
这个宏函数的作用是获取结构中属性的长度。我知道这个函数是干什么用的,但我不明白“ ((Struct*)0)
”的意思。
如果你能给我一些解释,我会安抚:)。
解决方案
常量值0
有资格作为空指针常量。因此,该表达式(Struct*)0
将该空指针常量转换为类型的指针Struct *
。然后表达式获取Attribute
成员。
尝试评估((Struct*)0)->Attribute
将导致空指针延迟,但是此表达式是sizeof
运算符的参数。这意味着表达式实际上并没有被评估,而是简单地检查以确定它的类型。
因此,您无需拥有该类型的对象即可为您提供命名结构成员sizeof(((Struct*)0)->Attribute)
的大小。Attribute
Struct
推荐阅读
- python - 如何在一个类中实例化多个类:Python OOP
- react-native - 阻止来自 react-native-webview 的 youtube 网站重定向
- amazon-dynamodb - 如何让 AWS JavaScript SDK 和 DynamoDB 与 LocalStack 一起使用
- javascript - 多个字符串替换功能在nodejs中不起作用
- vue.js - Nuxt with composition api - 在组合函数中访问根实例
- c# - ASP.NET Core 3.1 API Ocelot JWT 在登录时返回 401
- python - 缺少lib文件,如何解决?
- here-api - 在这里请求邮政编码的坐标时地理编码器不准确
- android - Flutter:在 null 上调用了方法“animateCamera”
- c++ - std::sample() 每次都返回相同的元素