开发者社区> 问答> 正文

C语言比较难懂的关于数字0的用法?

看代码的时候, 看到一段这样的:
( (size_t)& ((void *)0)->member )

请问这个0是什么意思, 用在这里, 代表什么??? 这条语句有什么作用.

展开
收起
a123456678 2016-06-14 10:48:38 1968 0
1 条回答
写回答
取消 提交回答
  • 这样防止编译器产生不必要的检测。说白了,就是表示一个抽象的指针。 此处是指针数值的计算问题。因为member的成员变量的地址和整体结构对象的地址存在差值,自然可以通过一个存在0地址的整体结构的成员变量的地址,得到成员变量在结构中的偏移量。此处并不去纠结具体的指针类型。这样写的好处是这个宏的通用性强,只要某个结构中有这个成员变量。 (这里的描述不全面啊。void 不能直接获取结构指针的成员变量,这里还是需要转为具体结构的指针类型,哈,补充描述一下)哈。如果你要觉得不放心,完全可以在宏中代入一个类型T, 用 T完成 void *的工作。

    2019-07-17 19:36:58
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
为什么要学函数式编程? 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多