唬人的 C 語言考題

可以拿去考別人對 C 語言的熟悉度喔 XD

剛才跟某個朋友聊 MSN,聊著就突然講到 C 語言去了,因為好人助教的職業病使然,我突然扮起壞人考了他這樣的題目:

int x = 0;
if (x = 0 || x == 0) printf("%dn", x);
printf("%dn", x);

請問這段正常的 C 語言程式碼會輸出什麼結果到螢幕上呢?
當然直接去 compile & run 就會知道答案了,不過你可以問問自己第一時間想到什麼答案 😛

8 comments

  1. 呵呵.. 這種 operators priority order
    出在考題沒幾個 programmer 會通過的.. 😀
    不過基本上 Logical Operator 優先權一定大於 Assignment Operator (大部份語言都是).
    如果改成以下會比較機車..
    if (x = ++x >>1 || x == 0) printf(“%dn”, x);

  2. @Lian
    我想你拿去 compile 執行一下就知道答案了,
    謎底就留給想猜謎的朋友來猜好了 XD

  3. 因為int x=0; 所以(x == 0) 為true,C語言true = 1,接著(0 || 1) 為 1 (!註 or 有1就1),再來x = 1 即 變數 x 載入 1,所以 x 內容為 1,只要把 if 括弧內依次判斷就可以知道為什麼,這個應該是考驗運算符號的先後次序關係,以及 = 與 == 粗心的問題。

Comments are closed.