如果条件发生了什么?

我的一个朋友问我有关此代码的问题,我和他无法找出if条件下发生了什么。你们能解释一下这种情况如何发生吗?

int main()
{
   int i;

   if (i = (1,2,0))
       printf("Mehrose");
   else
       printf("Hello ");

   printf("%d\n",i);

   return 0;
}

此代码的输出为Hello 0

pwlsiynice 回答:如果条件发生了什么?

首先,在编译器看到我们得到的代码时进行格式化:

int main(void)
{
   int i;
   if(i=(1,2,0))
      printf("Mehrose");
   else 
      printf("Hello");
   printf("%d\n",i);
   return 0;
}

if语句可以分解:

    首先评估
  1. Comma operator ,,而运算符的左侧将被丢弃。对于每个运算符重复此操作:

    if(i=(1,0))

    if(i=(2,0))

    if(i=0)

  2. assignment operator =0的值分配给i,并返回表达式的右侧:

    if(0)

  3. 回想一下,0被评估为假(是“虚假”),1被评估为是真(是“真实”)。因此,第一个条件失败并执行第二个块。 “ Hello”打印到标准输出流,然后打印“ 0”。

,

在表达式中,

i=(1,0)

您正在使用comma operator,它会评估其所有操作数并产生其最右边操作数的结果-在此为0。 所以0被分配给i

因此,它等效于if (i = 0),后者将0分配给i并产生i的值,该值为false,因此将字符串打印在else分支中。

本文链接:https://www.f2er.com/3151076.html

大家都在问