赋值运算符和 c

Sai*_*hul 1 c assignment-operator

#include <stdio.h>

int main()
{
   int i,j;
   i=j=(22,23,24);
   printf("i:%d",i);
   printf("\nj:%d",j);
}
Run Code Online (Sandbox Code Playgroud)

这将 i,j 的输出都设为 24。

#include <stdio.h>

int main()
{
   int i,j;
   i=j=22,23,24;
   printf("i:%d",i);
   printf("\nj:%d",j);
}
Run Code Online (Sandbox Code Playgroud)

这使 i,j 都为 22。有人可以解释背后的术语吗。TIA

Mik*_*CAT 5

赋值运算符的=优先级高于逗号运算符,

C 运算符优先级 - cppreference.com

在这份声明中

i=j=(22,23,24);
Run Code Online (Sandbox Code Playgroud)

(22,23,24)首先计算。在2223由逗号运营商忽略,它被评价24。然后,将结果24赋给j,并将值也赋给i

另一方面,在这个声明中

i=j=22,23,24;
Run Code Online (Sandbox Code Playgroud)

i=j=22首先计算。这将分配22j,然后将值分配给i。之后,赋值运算符的计算结果22和整数文字23将被逗号运算符忽略。最后,表达式被计算为 value 24,它也被忽略。

  • 仅供参考,在其他情况下请注意“该值也分配给‘i’”。在“x = y = value”中,“value”没有分配给“y”,也分配给了“x”。“y”接收转换为“y”类型的值,然后“x”接收转换为“x”类型的结果。所以`双x; 整数y;x = y = 3.5;` 将 3 分配给 `x`,而不是 3.5。 (2认同)