请考虑以下代码,
int i;
i = 1,2,3,4,5;
printf("First time i = %d\n",i);
i = (1,2,3,4,5);
printf("Second time i = %d\n",i);
输出:
第一次 i = 1
第二次 i = 5
为什么括号使逗号运算符取最后一个值而没有括号它取第一个值?
提前致谢。
第一个等效于(i = 1),2,3,4,5;
这意味着逗号无效。与括号一起使用时,它返回“逗号分隔列表”中的最后一个值
这都是由于运算符优先级,您可以在此处查看有关的表格
这是由于运算符优先级和评估顺序。=
比绑定更难,
,从中我们可以看出以下两个表达式是相同的:
i = 1,2,3,4,5 /* <- same as -> */ (i = 1),(2),(3),(4),(5)
旁注:逗号运算符是所有运算符中“最弱”的运算符
为什么逗号运算符会产生我们列表的最后一个值?
简单来说,这个操作符只对第一个操作数求值以丢弃它并继续下一个操作数,它从左到右绑定,这意味着它将从左边开始,然后继续向右走。
我在哪里可以阅读有关此主题的更多信息?
因为=
具有比,
(最低的)更高的优先级,所以第一个与
(i = 1),2,3,4,5;
它分配1
给i
( i = 1
) 然后评估表达式2
, 3
, 4
, 并5
通过逗号运算符(整个表达式实际上导致5
,未使用)。在第二个中,
(1,2,3,4,5)
被括号括起来,因此它将在 之前首先被评估=
。它导致5
(最右边的表达式;这是逗号运算符的行为),然后分配给i
.
i = (1,2,3,4,5);
| |
\---------\--- results in 5 then is assigned to i