Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果条件不同_C - Fatal编程技术网

C 如果条件不同

C 如果条件不同,c,C,当我用C语言编写程序时,我提出了一个我无法理解的问题。我正在检查if语句中是否满足条件,但我想知道以下各项之间是否有任何区别: if(ptr != NULL) or if(ptr) 对我来说,我觉得这两个都是正确的,但是在C世界中,第二个会被更多地使用,而在Java世界中,第一个会被更多地使用。一个比另一个更正确吗?这两个都是正确的,并且是等效的 如果指针为NULL,则指针单独计算为false,否则计算为true。两者都正确且等效 如果指针为NULL,则指针单独计算为false,否则计算为tr

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

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

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

这两个都是正确的,并且是等效的


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

两者都正确且等效


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

在C中,任何计算为
0
(零)的值都是“false”,任何非零的值都是“true”

因此,当
ptr
NULL
时,这两个
if
条件的工作方式相同:

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

以及:

if(ptr)
=
if(0)


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

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

因此,当
ptr
NULL
时,这两个
if
条件的工作方式相同:

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

以及:

if(ptr)
=
if(0)


你会让人们争论哪一个更好,但你会在代码中看到这两个。第一个更明确,因为它更明确。第二个较短。这两种方法在技术上都是正确和等效的。

第一种方法显然更清晰,尽管c级老兵会认识到第二种方法的本质。另请参见,它们都是正确的。两者都传达了不同的编程习惯用法。在java世界中,第二种是无效的,因此首选的形式自然是第一种形式。第一种形式当然更清楚,尽管c老手会认识到第二种形式是什么。另请参见,它们都是正确的。两者都传达了不同的编程习惯。在java世界中,第二种形式是无效的,因此首选形式自然是第一种形式。NULL并不总是等于0。有些平台是空的!=0@MOHAMED-我从没听说过。什么平台?而且很有趣。然而,这些链接表明
NULL
的计算结果为“值为0的整数常量”,尽管在某些平台上这种值的按位表示可能不是0x0。我相信我的答案仍然是正确的和有用的,因为我没有讨论
if
条件的位表示。是的,没错。即使NULL不是0,但对于这些平台,NULL也被计算为0,因此您的答案是有效的。NULL并非始终等于0。有些平台是空的!=0@MOHAMED-我从没听说过。什么平台?而且很有趣。然而,这些链接表明
NULL
的计算结果为“值为0的整数常量”,尽管在某些平台上这种值的按位表示可能不是0x0。我相信我的答案仍然是正确的和有用的,因为我没有讨论
if
条件的位表示。是的,没错。即使NULL不是0,但对于这些平台,NULL也被计算为0,因此您的答案是有效的。