让我们说a
是一个指针,在为它分配内存后,我想检查内存是否已成功分配,我已经看到过两种方法:
if(a != NULL)
if(a)
第一个和第二个陈述之间有什么区别?
答案 0 :(得分:2)
条件是:
if(a != NULL)
与条件if(a)
相同?
他们达到了同样的目的。唯一真正的区别在于可读性。
它们的效果是一样的,因为它们会产生同样的结果。
NULL
是一个几乎总是0的宏,所以:
if(a != NULL)
相当于:
if(a != 0)
非常类似于:
if(a)
因为它将检查表达式a
的计算结果是否为真。
因此,如果a
是指针,它们将是相同的。如果不是,则取决于NULL
的定义方式(正如我所说的那样almost always 0)。
答案 1 :(得分:1)
根据c faq:
if(p)等于if(p!= 0)
这是一个比较背景,所以 编译器可以告诉(隐式)0实际上是一个空指针 常量,并使用正确的空指针值。没有诡计 涉及到这里;编译器以这种方式工作,并生成相同的代码 对于这两种结构。空指针的内部表示 没关系。
答案 2 :(得分:0)
(a!= NULL)返回一个与(a)相同的布尔值。 如果内容等于0,则if语句返回false,否则返回true。 NULL表示0,所以如果a == 0则if返回false。 所以编译器完全一样。
希望它可以帮到你!
答案 3 :(得分:0)
没有功能差异;它们是等价的,它们都测试空指针。
任何偏好都纯粹是主观的。只需使用您喜欢的一个或您的项目/组织中的其他程序员所遵循的内容。