我通常想要做的是检查(x-3) > i
的时间。
我得到了以下代码:
int main()
{
int x = 10, i;
for(i = 0; i < 15; i++) {
if(x-3)
printf("%d, ", x);
x--;
}
return 0;
}
我不小心写了(x-3)
而不是(x-3 > i)
,我得到了这些结果:
10,9,8,7,6,5,4,2,1,0,-1,-2,-3,-4,
缺少3号。我明白这是某种与x-3
表达式有关的东西,但我还没有在谷歌找到一个明确的答案。
有没有人有想法?感谢...
答案 0 :(得分:9)
在C中,如果表达式的值为0(零),则 false ,†所有其他值都被视为 true。< / em>因此,表达式x - 3
true 当且仅当x != 3
这就是您在循环中跳过3
的原因。
这也适用于指针:空指针是 false,所有其他指针都是 true 。您将看到如下代码:
if (some_pointer) {
do_something();
}
此处do_something();
仅在some_pointer
不是空指针时执行。类似地,空指针检查通常如下所示:
if (!some_pointer) {
fprintf(stderr, "Encountered a null pointer\n");
abort();
}
因为应用于指针的逻辑非运算符对空指针产生1(真)而对所有其他指针产生0(假)。
†更为讽刺的是,当且仅当它比较等于0
时才被视为 false 。这个措辞与e有微妙的区别。 G。空指针可能没有值 0,但它比较等于整数文字 0
。
答案 1 :(得分:4)
它只是意味着构造运算符。:)
根据C标准(6.8.4.1 if语句)
2 在两种形式中,如果是,则执行第一个子语句 表达式比较不等于0 。在else形式中,第二个 如果表达式比较等于0,则执行子语句。如果 通过标签到达第一个子语句,第二个子语句是 没有执行。
在此if语句中
_Atomic
除非stdatomic.h
等于 if(x-3)
,否则表达式x - 3
始终会计算为非零值。
所以x
不等于3
这句话
x
执行并输出当前值3
。
当printf("%d, ", x);
等于x
时,会跳过此语句。
结果明确地证明了这一点
x
循环迭代15次,但只输出14个x值。由于if语句中的表达式,将跳过3
等于10, 9, 8, 7, 6, 5, 4, 2, 1, 0, -1, -2, -3, -4
^^^ 3 is absent
的值。
答案 2 :(得分:1)
var elem = document.getElementsByClassName('link-linkedin')
var list = elem.getElementsByTagName('a')
)
因此,当Uncaught TypeError: elem.getElementsByTagName is not a function(…)
,null
时。所以x = 3
等同于假。因此程序永远不会到达打印声明。
随着你的进展,你将x从10递减,所以最终x将等于3,此时你不会得到打印声明。
希望这有帮助!
答案 3 :(得分:0)
当你编写if(x-3)
时,如果条件表达式的计算结果为0,则认为是false,并且if括号内的代码将被丢弃。如果它的计算结果为非零值,则认为是真的,里面的代码被执行。
答案 4 :(得分:0)
使用if()
语句时,是否输入if
语句的正文,具体取决于()
中表达式的真/假。
注意:在C中,0与false相同。
当x为3时,表达式x-3
为0 / false,因此未输入if
的正文。