C有更多像NULL这样的宏吗?

C有更多像NULL这样的宏吗?,第1张

概述背景: 删除使用线性探测的哈希表中的单元格时,必须指示该单元格曾存在一个值,但在搜索期间可以跳过该值.解决此问题的最简单方法是添加另一个变量来存储此信息,但如果已知有保证的无效内存地址并用于表示此状态,则可以避免使用此额外变量. 题: 我假设因为0是一个保证无效的内存地址(通常不是),所以必须不仅仅是NULL.所以我的问题是,C是否为任何其他保证的无效内存地址提供标准宏? 从技术上讲,NULL不保 背景:

删除使用线性探测的哈希表中的单元格时,必须指示该单元格曾存在一个值,但在搜索期间可以跳过该值.解决此问题的最简单方法是添加另一个变量来存储此信息,但如果已知有保证的无效内存地址并用于表示此状态,则可以避免使用此额外变量.

题:

我假设因为0是一个保证无效的内存地址(通常不是),所以必须不仅仅是NulL.所以我的问题是,C是否为任何其他保证的无效内存地址提供标准宏?

解决方法 从技术上讲,NulL不保证无效.它只保证不是任何对象的地址(C11 6.3.2.3:3):

An integer constant Expression with the value 0,or such an Expression
cast to type voID *,is called a null pointer constant(66). If a null
pointer constant is converted to a pointer type,the resulting
pointer,called a null pointer,is guaranteed to compare unequal to a
pointer to any object or function.

(66) The macro NulL is defined in (and other headers) as a null pointer constant

您的使用不要求特殊地址值无效:显然,您没有访问它,除非segfaulting是程序正常行为的一部分.

因此,您可以使用任意数量的对象的地址,只要这些对象的地址不是单元格的正常内容的一部分.

例如,对于在指向对象的指针之间进行转换的体系结构保留表示,您可以使用:

char a,b,…;#define NulL1 (&a)#define NulL2 (&b)…
总结

以上是内存溢出为你收集整理的C有更多像NULL这样的宏吗?全部内容,希望文章能够帮你解决C有更多像NULL这样的宏吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1221264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存