C中的棘手数组增量

时间:2017-01-31 21:52:23

标签: c arrays increment

我不明白为什么在if语句之前++ b [1]等于1,但在if-statment ++ b [1]之后等于0.为什么++ b [1]不会增加if语句?

#include <stdio.h>

int main()
{
    int c = 0;
    int b[3] = {4};
    printf("%d\n", ++b[1]); // return 1
    b[1]--;
    if((c-- && ++b[1])|| b[0]++)
    {
        printf("%d\n", b[1]); // return 0
        printf("%d\n", c); // return -1
    }
    return 0;
}

2 个答案:

答案 0 :(得分:3)

if((c-- && ++b[1])|| b[0]++)

c--会产生0,因此不会评估++b[1]

这称为short-circuit evaluation

答案 1 :(得分:2)

这里只有一些令人困惑的操作员使用情况。

  • c-- postfix 减量,因此在条件语句c中,在递减之前会被评估为false(因为它是0)。
  • 既然&&短路并且仅在第一个条件为真时评估第二个条件,我们不评估++b[1],而是以b[0]++的真实性为条件。