gpt4 book ai didi

c - 为什么在 C 的 if-else 条件中传递 (!NULL) 为真?

转载 作者:行者123 更新时间:2023-12-04 10:46:38 27 4
gpt4 key购买 nike

在这几行代码中,

void main()
{
if(!NULL)
{
printf("one.");
}
else
{
printf("two");
}
}

输出是一个。这是为什么?为什么 !NULL 为真?

最佳答案

来自 C 标准#6.3.2.3p3 [已添加强调]

3 An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.66) If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.

....
....

66) The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant; see 7.19.

来自 C 标准#6.5.3.3p5

5 The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int. The expression !E is equivalent to (0==E).

所以,这个声明

if(!NULL)

相当于

if (0==NULL)

0==NULL被评估为 true .因此,您得到输出 one .


附加:

void main() 的返回类型不符合标准。相反,您应该使用 int作为 main() 的返回类型.

关于c - 为什么在 C 的 if-else 条件中传递 (!NULL) 为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55036051/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com