如何在C中评估以下代码?

时间:2016-07-23 04:51:29

标签: c

我遇到了一个代码段,其中使用了一个语句int k=(a++,++a)。 我不明白这个类型的语句是(a++,++a)以及它将如何评估。为什么在这里使用支架?这是函数调用吗?

这是代码。

#include <stdio.h>
int main(void) {
    int a=5;
    int k=(a++,++a);
    printf("%d\n",k);
    return 0;
}

我得到的输出是7 - 为什么会这样?

2 个答案:

答案 0 :(得分:6)

这不是函数调用。

这是使用逗号运算符的示例,该运算符从左到右计算每个表达式并返回最右侧表达式的结果。它和写作一样

a++;
k = ++a;

如果已经写好了

k = a++, ++a;

然后它将被解析为

(k = a++), ++a;

并评估为

k = a++;
++a;

答案 1 :(得分:0)

是的,你是对的;这就是为什么以下代码

int main(void) {
    int y=1,x=0;
    int l=(y++,x++)?y:x;
    printf("%d ",l);
    return 0;
}

生成1作为输出。

(y++,x++)的值返回x,即最右边的表达式,因此l的值变为1