' - '作为布尔表达式做什么

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表达方式有关的东西,但我还没有在谷歌找到一个明确的答案.

有没有人有想法?谢谢...

fuz*_*fuz 9

在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.

  • @rolory,但请注意,如果您仍然将数字与零进行比较,许多人认为它是一种好的风格:`if(x - 3!= 0)...`.减少混乱. (3认同)