簡體   English   中英

包含一元運算符的程序的輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM