【问题标题】:C if condition difference [duplicate]C if条件差异[重复]
【发布时间】:2013-04-23 09:22:32
【问题描述】:

当我用 C 编写程序时,我想出了一个我无法弄清楚的问题。我正在检查 if 语句中是否满足条件,但想知道以下之间是否有任何区别:

if(ptr != NULL)
or
if(ptr)

对我来说,我觉得这两个都是正确的,但是在 C 世界中,第二个会被更多地使用,而在 Java 世界中,第一个会被更多地使用。一个比另一个更正确吗?

【问题讨论】:

  • 第一个肯定更清楚,虽然c老手会认出第二个是什么。另见stackoverflow.com/q/459743
  • 他们都是正确的。两者都传达不同的编程习惯。
  • 在java世界中,第二个是无效的,所以自然首选第一个。

标签: c


【解决方案1】:

在 C 中,任何计算结果为 0(零)的都是“假”,任何非零都是“真”。

因此,当 ptrNULL 时,这两个 if 条件最终会以相同的方式工作:

if (ptr != NULL) = if (0 != 0) = if (0)

和:

if (ptr) = if (0)

你会让人们争论哪个更好,但你会在代码中看到两者。第一个更清楚,因为它更明确。第二个更短。两者在技术上都是正确且等效的。

【讨论】:

  • NULL 并不总是等于 0。有一些平台 NULL != 0
  • @MOHAMED - 我从来没有听说过。什么平台?
  • 有趣。但是,这些链接表明NULL 的计算结果为“值为 0 的整数常量”,尽管在某些平台上此类值的按位表示可能不是 0x0。我相信我的回答仍然正确且有用,因为我不是在讨论 if 条件的按位表示。
  • 是的,完全正确。即使 NULL 不是 0 但对于这些平台 NULL 被评估为 0 所以你的答案是有效的。
【解决方案2】:

两者都是正确且等价的。

如果指针是NULL,则单独的指针计算为false,否则计算为true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2014-07-18
    • 2016-07-15
    • 2019-05-07
    • 2018-08-16
    相关资源
    最近更新 更多