[英]Output for program containing unary operators
以下代碼的輸出是什么? 在線編譯器給出的結果是:12 6 11.有人可以告訴我如何嗎?
#include<stdio.h>
#define MAX(x,y) (x)>(y)?(x):(y)
main()
{
int i = 10, j = 5, k = 0;
k = MAX(i++, ++j);
printf("%d %d %d", i, j, k);
}
它被翻譯成:
k = (i++)>(++j)?(i++):(++j)
現在很容易說明原因。
i++
使i
11, ++j
使j
。現在我們有了:
10 > 6
沒錯,然后我們返回i++
,現在是12。
使用-E
標志查看預處理器的輸出。
k = MAX(i++, ++j);
該代碼將被替換為
k = (i++)>(++j)?(i++):(++j);
當檢查條件(i++)>(++j)
, i
是后遞增(在操作后它將遞增),而j
是前遞增(將j
遞增並替換它)。 因此在檢查時需要(10)>(6),這是真的! 經過這次檢查, i
將成為11歲。
k = (i++)>(++j)?(i++):(++j); --> k = (i++)>(++j)?((11)++):(++j); // note after condition check i becomes 11.
// due to post increment after assigning the value to k, i will be incremented to 12. but the last ++j wont excuted.
這樣您將獲得輸出12 6 11
。
否則您可以重寫k = (i++)>(++j)?(i++):(++j);
如
if((i++)>(++j)) //when condition check i=10, j=6 after check i=11,j=6
k=i++; // k= 11++; after assigning 11 to k i will be incremented to 12
else
k=++j; // this wont be executed
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.