我碰到一個代碼片段,其中使用了一條語句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--爲什麼?
我碰到一個代碼片段,其中使用了一條語句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--爲什麼?
這不是函數調用。
這是一個使用逗號運算符的示例,該運算符從左到右評估每個表達式並返回最右邊表達式的結果。這是相同的寫作
a++;
k = ++a;
如果它被寫
k = a++, ++a;
然後它會被解析爲
(k = a++), ++a;
和評估的
k = a++;
++a;
是你是對的;這就是爲什麼下面的代碼
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
。
你確定代碼是? int k =(a ++,++ a);源代碼是否被編譯? –
是的,和o/p來作爲'7' – a874
@LeonidasMenendez我很確定這是寫的正確。他使用逗號運算符。 – WhozCraig