赋值运算符与c #包括 int main() { int i,j; i=j=(22,23,24); printf(“i:%d”,i); printf(“\nj:%d”,j); }

赋值运算符与c #包括 int main() { int i,j; i=j=(22,23,24); printf(“i:%d”,i); printf(“\nj:%d”,j); },c,assignment-operator,C,Assignment Operator,这给出了i,j和24的输出 #include <stdio.h> int main() { int i,j; i=j=(22,23,24); printf("i:%d",i); printf("\nj:%d",j); } #包括 int main() { int i,j; i=j=22,23,24; printf(“i:%d”,i); printf(“\nj:%d”,j); } 这两个i,j都是22。 有人能解释一

这给出了i,j和24的输出

#include <stdio.h>

int main()
{
   int i,j;
   i=j=(22,23,24);
   printf("i:%d",i);
   printf("\nj:%d",j);
}
#包括
int main()
{
int i,j;
i=j=22,23,24;
printf(“i:%d”,i);
printf(“\nj:%d”,j);
}
这两个i,j都是22。 有人能解释一下背后的术语吗。
TIA

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

在这份声明中

#include <stdio.h>

int main()
{
   int i,j;
   i=j=22,23,24;
   printf("i:%d",i);
   printf("\nj:%d",j);
}
i=j=(22,23,24);
首先计算
(22,23,24)
。逗号运算符忽略
22
23
,并将其计算为
24
。然后,结果
24
被分配给
j
,并且该值也被分配给
i

另一方面,在这份声明中

#include <stdio.h>

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

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

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

在这份声明中

#include <stdio.h>

int main()
{
   int i,j;
   i=j=22,23,24;
   printf("i:%d",i);
   printf("\nj:%d",j);
}
i=j=(22,23,24);
首先计算
(22,23,24)
。逗号运算符忽略
22
23
,并将其计算为
24
。然后,结果
24
被分配给
j
,并且该值也被分配给
i

另一方面,在这份声明中

#include <stdio.h>

int main()
{
   int i,j;
   i=j=22,23,24;
   printf("i:%d",i);
   printf("\nj:%d",j);
}
i=j=(22,23,24);
首先计算
i=j=22
。这将
22
分配给
j
,然后将值分配给
i
。之后,逗号运算符将忽略赋值运算符
22
和整数文本
23
的计算结果。最后,表达式被计算为值
24
,该值也被忽略。

常量表达式的逗号分隔列表没有多大意义。逗号运算符的主要用途是分隔赋值-这是一种透明且有意识的副作用

使用括号和两个以上的赋值,它将分组为:

i=j=22,23,24;
由于parens
(E)
中的表达式是一个主表达式,因此从层次上可以将其视为

i = j = (22,x=23,y=24);
E
由三个逗号分隔的(子)表达式组成,其中最后一个表达式起作用。这是带有结果/评估的作业
y=24

22
被扔掉,但是
x=23
有明显的副作用

通常,
E
类似于不需要参数的
2*n+1
。直到
i=j>22?23:24
(有点让人困惑)

第二组:

i = j = E; 
这一点现在开始有意义了。一条线上只有三个助手。23和24不是“丢失的”


赋值表达式
i=j=22
本身有一级递归;它从右向左工作,这是很自然的

但是这些例子更多的是关于组合分隔逗号运算符
和分组括号

常量表达式的逗号分隔列表没有多大意义。逗号运算符的主要用途是分隔赋值-这是一种透明且有意识的副作用

使用括号和两个以上的赋值,它将分组为:

i=j=22,23,24;
由于parens
(E)
中的表达式是一个主表达式,因此从层次上可以将其视为

i = j = (22,x=23,y=24);
E
由三个逗号分隔的(子)表达式组成,其中最后一个表达式起作用。这是带有结果/评估的作业
y=24

22
被扔掉,但是
x=23
有明显的副作用

通常,
E
类似于不需要参数的
2*n+1
。直到
i=j>22?23:24
(有点让人困惑)

第二组:

i = j = E; 
这一点现在开始有意义了。一条线上只有三个助手。23和24不是“丢失的”


赋值表达式
i=j=22
本身有一级递归;它从右向左工作,这是很自然的


但这些示例更多地是关于组合分隔逗号运算符
和分组括号

请注意,在其他情况下,“值也分配给
i
”。在
x=y=value
中,
未分配给
y
,也分配给
x
y
接收转换为
y
类型的值,然后
x
接收转换为
x
类型的结果。所以
doublex;int-y;x=y=3.5将3分配给
x
,而不是3.5。仅供参考,请注意在其他情况下“值也分配给
i
”。在
x=y=value
中,
未分配给
y
,也分配给
x
y
接收转换为
y
类型的值,然后
x
接收转换为
x
类型的结果。所以
doublex;int-y;x=y=3.5将3分配给
x
,而不是3.5。