我想知道在分配“空”值时使用(void *) 1
而不是null
是否有任何差异/优势。 (在C中)
答案 0 :(得分:5)
除非您需要区分NULL
指针(void *) 1
,否则您应该使用NULL
来表示空指针,原因有很多。
free
指针上调用NULL
不会导致程序崩溃。它只会做什么。(void *) 1
作为有效值。答案 1 :(得分:3)
除了@merlin所说的理由之外,我想补充说C99标准§6.3.2.3¶3说
值为0的整型常量表达式,或此类表达式 强制转换为void *,称为空指针常量。如果为null 指针常量被转换为指针类型,由此产生 指针,称为空指针,保证比较不等于 指向任何对象或函数的指针。
因此,该标准保证宏NULL
(在标头stddef.h
中)或表达式0
定义的空指针不能与内存中任何对象的地址进行比较。因此,使用(void *) 1
可能会导致问题,如果它偶然比较等于对象的地址。不建议这样做,应该避免。