我可以假设NULL值作为假吗?

时间:2015-03-04 14:21:10

标签: c pointers comparison conditional-statements null-pointer

我知道NULL == (void *)0,但提到它可以表示为不包含全零的值。困扰我的是,如果这些代码片段对于所有(any_type *)

是相同的
any_type *val;

if (val) { ... };

if (val != NULL) { ... };

1 个答案:

答案 0 :(得分:10)

是。您可以通过这种方式使用宏NULL。它是一个空指针常量,等于0

comp.lang.c FAQ list · Question 5.3

  

当C需要表达式的布尔值时,当表达式比较等于零时推断出false值,否则推断为true值。也就是说,每当写一次

if(expr)
     

其中expr是任何表达式,编译器本质上就像它被写成

一样
if((expr) != 0)
     

p代替普通指针表达式expr,我们有

if(p)   is equivalent to    if(p != 0)
     

这是一个比较上下文,因此编译器可以告诉(隐式)0实际上是一个空指针常量,并使用正确的空指针值。这里没有任何诡计;编译器以这种方式工作,并为两个构造生成相同的代码。 空指针的内部表示无关紧要


  

但提到它可以表示为不包含全零的值。

是。真正。但在这种情况下representation doesn't matter

  

每当程序员通过编写0NULL来请求空指针时,编译器负责生成机器用于该空指针的任何位模式