请考虑以下代码,
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);
Run Code Online (Sandbox Code Playgroud)
输出:
第一次i = 1
第二次i = 5
为什么括号使逗号运算符取最后一个值而没有括号它取第一个值?
提前致谢.
这是由于运营商的优先级和评估顺序.我们可以=更加难以理解,,以下两个表达式是相同的:
i = 1,2,3,4,5 /* <- same as -> */ (i = 1),(2),(3),(4),(5)
Run Code Online (Sandbox Code Playgroud)
旁注:逗号运算符是它们的"最弱"运算符
为什么逗号运算符会产生列表的最后一个值?
简单来说,这个操作符只评估第一个操作数以丢弃它并移动到下一个操作数,它从左到右绑定,这意味着它将从左边开始,并继续向右走.
我在哪里可以阅读有关此主题的更多信息
赋值的优先级高于逗号,因此在第一种情况下得到的结果.您可以在此处找到整个运算符优先级表.
为什么括号使逗号运算符取最后一个值而没有括号它取第一个值?
因为括号用于覆盖优先级.第一种情况隐含地等同于:
(i = 1),2,3,4,5;
Run Code Online (Sandbox Code Playgroud)
逗号从左到右进行求值,最右边的值是整个表达式的值.阅读此处的文档.
逗号运算符具有从左到右的关联性.用逗号分隔的两个表达式从左到右进行计算.始终评估左操作数,并在评估右操作数之前完成所有副作用.
因为=具有比,(具有最低值)更高的优先级,所以第一个与...相同
(i = 1),2,3,4,5;
Run Code Online (Sandbox Code Playgroud)
其分配1到i(i = 1),然后评估表达式2,3,4,和5通过逗号运算符(整个表达式实际上导致5,这是不使用).在第二个,
(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
括号括起来,因此它将首先进行评估=.它导致5(最右边的表达式;这是逗号运算符的行为),然后分配给它i.
i = (1,2,3,4,5);
| |
\---------\--- results in 5 then is assigned to i
Run Code Online (Sandbox Code Playgroud)
请参阅运营商优先级维基百科文章.
| 归档时间: |
|
| 查看次数: |
2324 次 |
| 最近记录: |