2016-07-23 20 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