2017-10-19 107 views
6

假设a是一个指针,并为它分配内存后,我要检查,如果内存已成功分配,我已经看到有两种方法这样做:在C中,条件是:“if(a!= NULL)”与条件“if(a)”相同吗?

if(a != NULL) 

if(a) 

是什么第一之间的差异和第二个陈述?

+4

他们最终会变成同样的东西。 – Steve

+0

NULL是一个通常定义为0的宏,因此第一个表达式与(a!= 0)相同,第二个也检查是否一个!= 0,所以它的编辑相同:通常是 –

+0

是的,如果*'a' *是一个指针,如果'a'不是一个指针,取决于NULL的定义,它可能会不同。 –

回答

0

(a!= NULL)返回与(a)相同的布尔值。 如果内容等于0,则if语句返回false,否则返回true。 NULL表示0,所以如果a == 0,那么if返回false。 所以编译器就是这样。

希望它可以帮助你!

0

没有功能差异;它们是相等的,它们都测试空指针。

任何偏好纯粹是主观的。只需使用你喜欢的或你的项目/组织中的同行程序员所遵循的内容。

+0

你能详细说一下吗? – Marievi

2

是条件:if(a != NULL)条件相同if(a)

它们达到相同的目的。唯一真正的区别在于可读性。


他们的效果是一样的,因为他们会导致同样的事情。

NULL是一个宏,几乎总是0,因此:

if(a != NULL) 

等同于:

if(a != 0) 

这是非常相似:

if(a) 

,因为它会检查表达式a的计算结果是否为真。

所以,如果a是一个指针,它们将是相同的。如果不是,那么它将取决于如何定义NULL(正如我所说的是almost always 0)。

+1

你能否详细说明一下? – Marievi

+0

肯定@Marievi,在我的路上。 – gsamaras

1

根据c faq

如果(p)是等同于如果(!p值= 0)

,这是一个比较上下文,所以 编译器可以告诉(隐含的) 0实际上是一个空指针 常量,并使用正确的空指针值。这里没有涉及 的诡计;编译器可以这样工作,并为两个构造生成相同的代码 。空指针 的内部表示并不重要。