rol*_*ory 5 c if-statement boolean-expression
我通常想做的是检查何时(x-3) > i.
我得到以下代码:
int main()
{
int x = 10, i;
for(i = 0; i < 15; i++) {
if(x-3)
printf("%d, ", x);
x--;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不小心写了(x-3)而不是(x-3 > i),我得到了这些结果:
10,9,8,7,6,5,4,2,1,0,-1,-2,-3,-4,
缺少数字3.我明白这是某种与x-3表达方式有关的东西,但我还没有在谷歌找到一个明确的答案.
有没有人有想法?谢谢...
在C中,如果表达式 的值为0(零),则认为表达式为false,†所有其他值都被视为为真.因此, 当且仅当您在循环中看到被跳过的原因时,表达式才x - 3为真.x != 33
这也适用于指针:空指针为false,所有其他指针均为true.你会看到这样的代码:
if (some_pointer) {
do_something();
}
Run Code Online (Sandbox Code Playgroud)
do_something();仅当some_pointer不是空指针时才执行此处.同样,空指针检查通常如下所示:
if (!some_pointer) {
fprintf(stderr, "Encountered a null pointer\n");
abort();
}
Run Code Online (Sandbox Code Playgroud)
因为应用于指针的逻辑非运算符对于空指针产生1(真),对于所有其他指针产生0(假).
† 更迂腐,当且仅当它与...相比时才被认为是假的0.这个措辞与e有微妙的区别.G.空指针可能没有值 0,但它比较整数文字 0.