对占位符使用(void *)1而不是null是有好处的

时间:2014-04-12 05:44:29

标签: c

我想知道在分配“空”值时使用(void *) 1而不是null是否有任何差异/优势。 (在C中)

2 个答案:

答案 0 :(得分:5)

除非您需要区分NULL指针(void *) 1,否则您应该使用NULL来表示空指针,原因有很多。

  1. free指针上调用NULL不会导致程序崩溃。它只会做什么。
  2. 其他人更容易理解您的代码。
  3. 许多库函数接受NULL作为"空的"的有效值。参数。没有库函数接受(void *) 1作为有效值。

答案 1 :(得分:3)

除了@merlin所说的理由之外,我想补充说C99标准§6.3.2.3¶3说

  

值为0的整型常量表达式,或此类表达式   强制转换为void *,称为空指针常量。如果为null   指针常量被转换为指针类型,由此产生   指针,称为空指针,保证比较不等于   指向任何对象或函数的指针

因此,该标准保证宏NULL(在标头stddef.h中)或表达式0定义的空指针不能与内存中任何对象的地址进行比较。因此,使用(void *) 1可能会导致问题,如果它偶然比较等于对象的地址。不建议这样做,应该避免。