我的一个朋友问我有关此代码的问题,我和他无法找出if条件下发生了什么。你们能解释一下这种情况如何发生吗?
int main()
{
int i;
if (i = (1,2,0))
printf("Mehrose");
else
printf("Hello ");
printf("%d\n",i);
return 0;
}
此代码的输出为Hello 0
我的一个朋友问我有关此代码的问题,我和他无法找出if条件下发生了什么。你们能解释一下这种情况如何发生吗?
int main()
{
int i;
if (i = (1,2,0))
printf("Mehrose");
else
printf("Hello ");
printf("%d\n",i);
return 0;
}
此代码的输出为Hello 0
首先,在编译器看到我们得到的代码时进行格式化:
int main(void)
{
int i;
if(i=(1,2,0))
printf("Mehrose");
else
printf("Hello");
printf("%d\n",i);
return 0;
}
if语句可以分解:
Comma operator ,
,而运算符的左侧将被丢弃。对于每个运算符重复此操作:
if(i=(1,0))
if(i=(2,0))
if(i=0)
assignment operator =
将0
的值分配给i
,并返回表达式的右侧:
if(0)
回想一下,0
被评估为假(是“虚假”),1
被评估为是真(是“真实”)。因此,第一个条件失败并执行第二个块。 “ Hello”打印到标准输出流,然后打印“ 0”。
在表达式中,
i=(1,0)
您正在使用comma operator,它会评估其所有操作数并产生其最右边操作数的结果-在此为0。
所以0被分配给i
。
因此,它等效于if (i = 0)
,后者将0
分配给i
并产生i
的值,该值为false,因此将字符串打印在else分支中。