2016-07-23 48 views
2

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

这是代码。

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

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

+0

你确定代码是? int k =(a ++,++ a);源代码是否被编译? –

+1

是的,和o/p来作为'7' – a874

+3

@LeonidasMenendez我很确定这是写的正确。他使用逗号运算符。 – WhozCraig

回答

6

这不是函数调用。

这是一个使用逗号运算符的示例,该运算符从左到右评估每个表达式并返回最右边表达式的结果。这是相同的写作

a++; 
k = ++a; 

如果它被写

k = a++, ++a; 

然后它会被解析为

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

和评估的

k = a++; 
++a; 
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