在C中,条件是:“if(a!= NULL)”与条件“if(a)”相同吗?
问题描述:
假设a
是一个指针,并为它分配内存后,我要检查,如果内存已成功分配,我已经看到有两种方法这样做:在C中,条件是:“if(a!= NULL)”与条件“if(a)”相同吗?
if(a != NULL)
if(a)
是什么第一之间的差异和第二个陈述?
答
(a!= NULL)返回与(a)相同的布尔值。 如果内容等于0,则if语句返回false,否则返回true。 NULL表示0,所以如果a == 0,那么if返回false。 所以编译器就是这样。
希望它可以帮助你!
答
是条件:
if(a != NULL)
条件相同if(a)
?
它们达到相同的目的。唯一真正的区别在于可读性。
他们的效果是一样的,因为他们会导致同样的事情。
NULL
是一个宏,几乎总是0,因此:
if(a != NULL)
等同于:
if(a != 0)
这是非常相似:
if(a)
,因为它会检查表达式a
的计算结果是否为真。
所以,如果a
是一个指针,它们将是相同的。如果不是,那么它将取决于如何定义NULL
(正如我所说的是almost always 0)。
答
根据c faq:
如果(p)是等同于如果(!p值= 0)
,这是一个比较上下文,所以 编译器可以告诉(隐含的) 0实际上是一个空指针 常量,并使用正确的空指针值。这里没有涉及 的诡计;编译器可以这样工作,并为两个构造生成相同的代码 。空指针 的内部表示并不重要。
他们最终会变成同样的东西。 – Steve
NULL是一个通常定义为0的宏,因此第一个表达式与(a!= 0)相同,第二个也检查是否一个!= 0,所以它的编辑相同:通常是 –
是的,如果*'a' *是一个指针,如果'a'不是一个指针,取决于NULL的定义,它可能会不同。 –