如果条件包含++yvsy+=1

这是以下代码:

int main () {
   int x = 3, y = 0 ;
   if(x >= 3 && y+=1){
     if(y<=5){
       printf("%dn", ++x);
     } 
   }
   else{
     printf("%dn", x++);
   }
   printf("x=%d, y=%d", x, y++);
   return 0;
}

它不起作用,并且y+=1是它的原因,我认为它的行为方式与我将其替换为++y(有效)相同。

为什么如果我用 ++y 替换 y+=1 代码有效?为什么 y+=1 导致代码失败?

回答

问题是运算符优先级。+=的优先级低于&&,所以

if (x >= 3 && y += 1)

被解析为

if (((x >= 3) && y) += 1)

这是无效的,因为((x >= 3) && y)不是可以递增的左值。

添加括号来覆盖它。

if (x >= 3 && (y+=1)){


回答

x >= 3 && y+=1相当于(x >= 3 && y)+=1whilex >= 3 && ++y相当于(x >= 3) && (++y)


以上是如果条件包含++yvsy+=1的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>