【问题标题】:In C, is the condition : "if(a != NULL)" the same as the condition "if(a)"? [duplicate]在 C 中,条件:“if(a != NULL)”是否与条件“if(a)”相同? [复制]
【发布时间】:2017-10-19 12:16:03
【问题描述】:

假设a是一个指针,在为它分配内存后,我想检查内存是否分配成功,我见过两种方法:

if(a != NULL)

if(a)

第一个和第二个语句有什么区别?

【问题讨论】:

  • 它们最终会是一样的东西。
  • NULL 是一个通常定义为 0 的宏,因此第一个表达式与 (a != 0) 相同,第二个表达式还检查是否 a != 0,因此其编辑相同:通常
  • 是的,如果a是指针,如果a不是指针可能会有所不同,具体取决于NULL的定义。
  • @PawełDymowski 不正确,NULL 是一个定义为实现定义的空指针常量的宏。
  • 他们做同样的事情。我看到的唯一区别是可读性。

标签: c if-statement nul


【解决方案1】:

条件是:if(a != NULL)和条件if(a)一样吗?

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


它们的效果是一样的,因为它们会产生同样的结果。

NULL 是一个几乎总是为 0 的宏,所以:

if(a != NULL)

相当于:

if(a != 0)

这非常类似于:

if(a)

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

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

【讨论】:

  • 您能详细说明一下吗?
  • 确定@Marievi,在路上。
【解决方案2】:

根据c faq

if(p) 等价于 if(p != 0)

这是一个比较上下文,所以 编译器可以判断(隐式)0 实际上是一个空指针 常量,并使用正确的空指针值。没有诡计 涉及到这里;编译器确实以这种方式工作,并生成相同的代码 对于这两种结构。空指针的内部表示 没关系。

【讨论】:

    【解决方案3】:

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

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

      没有功能上的区别;它们是等价的,它们都测试空指针。

      任何偏好都是纯粹主观的。只需使用您喜欢的一个或您的项目/组织中的其他程序员所遵循的。

      【讨论】:

      • 您能详细说明一下吗?
      猜你喜欢
      • 2013-07-26
      • 2011-03-20
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      相关资源
      最近更新 更多