为什么把最后的num1、num2、0赋值给if块,else块就执行了?
Why else block is executed if num1, num2, and 0 at the end is assigned to if block?
在此代码中
#include <stdio.h>
int main(){
int i;
if(i= 50,40)
printf(" if blk i %d\n",i);
else
printf(" else part" );
return 0;
}
输出结果为
if blk i 50
但是如果if语句的赋值部分加了0,就会转到else部分。为什么这个 0 会转到其他部分?
下面的代码:
#include <stdio.h>
int main(){
int i;
if(i= 50,40,0)
printf(" if blk i %d\n",i);
else
printf(" else blk i %d\n", i);
printf("i %d\n", i);
return 0;
}
您正在使用 逗号运算符。使用此运算符的表达式的值为右侧的值。
在这种情况下:
(i= 50,40)
i
首先设置为 50,然后计算值 40,因此表达式的值为 40。因为这是一个非零值,所以它在布尔上下文中计算为真并输入if
部分。
在这种情况下:
(i= 50,40,0)
发生与上面相同的情况,但随后计算 0,因此表达式的值为 0。零在布尔上下文中计算为 false,因此它进入 else
部分。
这条语句:
if(i= 50,40)
实际上是:
if(40)
逗号运算符首先将 i
分配给 50(逗号运算符的优先级低于赋值),然后作为条件使用最后一个元素,即 40
but when a zero is added to the assignment part in if statement, it goes to the else part.
因为作为条件,使用了最后一个元素,即 0
。 0
导致 if
失败,并执行 else 块。
表达式 a, b
首先计算 a
并丢弃结果。
然后计算 b
,该值是表达式的结果。
i= 50,40
首先计算 i = 50
然后产生 40
作为结果。
由于 40
不是 0
,因此它被转换为 true
作为条件。
i = 50, 40, 0
计算 i = 50
,然后计算 40
,然后计算 0
,它成为表达式的值。
0
转换为 false
。
另一方面,i = (50,40)
会将 40
分配给 i
并完全忽略 50
。
在此代码中
#include <stdio.h>
int main(){
int i;
if(i= 50,40)
printf(" if blk i %d\n",i);
else
printf(" else part" );
return 0;
}
输出结果为
if blk i 50
但是如果if语句的赋值部分加了0,就会转到else部分。为什么这个 0 会转到其他部分?
下面的代码:
#include <stdio.h>
int main(){
int i;
if(i= 50,40,0)
printf(" if blk i %d\n",i);
else
printf(" else blk i %d\n", i);
printf("i %d\n", i);
return 0;
}
您正在使用 逗号运算符。使用此运算符的表达式的值为右侧的值。
在这种情况下:
(i= 50,40)
i
首先设置为 50,然后计算值 40,因此表达式的值为 40。因为这是一个非零值,所以它在布尔上下文中计算为真并输入if
部分。
在这种情况下:
(i= 50,40,0)
发生与上面相同的情况,但随后计算 0,因此表达式的值为 0。零在布尔上下文中计算为 false,因此它进入 else
部分。
这条语句:
if(i= 50,40)
实际上是:
if(40)
逗号运算符首先将 i
分配给 50(逗号运算符的优先级低于赋值),然后作为条件使用最后一个元素,即 40
but when a zero is added to the assignment part in if statement, it goes to the else part.
因为作为条件,使用了最后一个元素,即 0
。 0
导致 if
失败,并执行 else 块。
表达式 a, b
首先计算 a
并丢弃结果。
然后计算 b
,该值是表达式的结果。
i= 50,40
首先计算 i = 50
然后产生 40
作为结果。
由于 40
不是 0
,因此它被转换为 true
作为条件。
i = 50, 40, 0
计算 i = 50
,然后计算 40
,然后计算 0
,它成为表达式的值。
0
转换为 false
。
i = (50,40)
会将 40
分配给 i
并完全忽略 50
。