This question already has answers here:
Closed 4 years ago.
What does the comma operator , do?
(8个答案)
我不明白下面的代码是如何输出的“-3”?
#include <stdio.h>
void main()
{
    int a = -5;
    int k = (a++, ++a);
    printf("%d\n", k);
}

在c或c++中,这个int k = (a++, ++a);语句背后的概念是什么?

最佳答案

它之所以工作,是因为,运算符创建了一个sequence point
§5.19.1(逗号运算符)
逗号运算符从左到右分组。由逗号分隔的一对表达式从左到右求值;左表达式是丢弃的值表达式(第5条)。与左表达式相关联的每个值计算和副作用在与右表达式相关联的每个值计算和副作用之前排序。结果的类型和值是右操作数的类型和值;结果的值类别与其右操作数相同,如果其右操作数是glvalue和位字段,则为位字段。如果右操作数的值是临时的(12.2),则结果是临时的。
因此:
a初始化为-5
然后执行a++,并将a修改为-4.
然后执行++a,将a修改为-3,并返回-3k

10-07 13:38