C 在if条件下发生了什么?
我的一个朋友问我这个代码,我和他都无法发现,在if条件下发生了什么。你们能解释一下这种情况是怎么发生的吗C 在if条件下发生了什么?,c,C,我的一个朋友问我这个代码,我和他都无法发现,在if条件下发生了什么。你们能解释一下这种情况是怎么发生的吗 int main() { int i; if (i = (1, 2, 0)) printf("Mehrose"); else printf("Hello "); printf("%d\n", i); return 0; } 此代码的输出是表达式中的Hello 0 i=(1,2,0) 您使用的是,它计算其所有操作数,并生成其最
int main()
{
int i;
if (i = (1, 2, 0))
printf("Mehrose");
else
printf("Hello ");
printf("%d\n", i);
return 0;
}
此代码的输出是表达式中的Hello 0
i=(1,2,0)
您使用的是,它计算其所有操作数,并生成其最右边的操作数的结果-此处为0。
所以0被分配给i
这相当于如果i=0,它将0赋给i,并产生i的值,该值为false,因此它在else分支中打印字符串。在表达式中
i=(1,2,0)
您使用的是,它计算其所有操作数,并生成其最右边的操作数的结果-此处为0。
所以0被分配给i
因此,它相当于if i=0,它将0分配给i,并产生i的值,该值为false,因此它在else分支中打印字符串。首先,当编译器看到我们得到的代码时格式化:
int main(void)
{
int i;
if(i=(1,2,0))
printf("Mehrose");
else
printf("Hello");
printf("%d\n",i);
return 0;
}
if语句可以细分为:
,则首先求值,放弃运算符的左侧。这对每个操作员重复:
ifi=1,2,0
ifi=2,0
ifi=0
=为i赋值0,并返回表达式的右侧:
如果0
回想一下,0被评估为false是falsy,1被评估为true是truthy。因此,第一个条件失败,执行第二个块。Hello被打印到标准输出流,后跟0
首先,当编译器看到我们得到的代码时进行格式化:
int main(void)
{
int i;
if(i=(1,2,0))
printf("Mehrose");
else
printf("Hello");
printf("%d\n",i);
return 0;
}
if语句可以细分为:
,则首先求值,放弃运算符的左侧。这对每个操作员重复:
ifi=1,2,0
ifi=2,0
ifi=0
=为i赋值0,并返回表达式的右侧:
如果0
回想一下,0被评估为false是falsy,1被评估为true是truthy。因此,第一个条件失败,执行第二个块。Hello被打印到标准输出流,后跟0
你可能想知道它是如何工作的,你可能想知道它是如何工作的。