C语言中复杂的数组增量

C语言中复杂的数组增量,c,arrays,increment,C,Arrays,Increment,我不明白为什么在if语句++b[1]之前等于1,而在if语句++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(

我不明白为什么在if语句++b[1]之前等于1,而在if语句++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;
}
#包括
int main()
{
int c=0;
int b[3]={4};
printf(“%d\n”,++b[1]);//返回1
b[1]——;
if((c--&&&++b[1])|b[0]++)
{
printf(“%d\n”,b[1]);//返回0
printf(“%d\n”,c);//返回-1
}
返回0;
}
c--
产生
0
,因此不计算
++b[1]


这被称为。

这里只是一些令人困惑的操作符用法

  • c--
    是后缀减量,因此在条件语句中
    c
    在被减量之前被计算为false(正如
    0
  • 现在,由于
    &&
    短路,并且只有在第一个条件为真时才计算第二个条件,因此我们不计算
    ++b[1]
    ,而是根据
    b[0]+
    的真实性输入条件
为什么?为什么会有人写这样的代码?就像在生活中一样,最好一次只做一件事。这是我大学时跟踪记忆练习的一部分
if((c-- && ++b[1])|| b[0]++)