4

このコードブロックについて説明してください:

void main()
{   
    int t,
        a = 5,
        b = 10,
        c = 15;  
    t = (++a && ++b, ++a), ++a || ++c;   // need explanation for this line
    printf("%d  %d  %d %d", t, a, b, c);
}
4

3 に答える 3

8

コンマ演算子はその 2 番目のオペランドの結果を返し、||演算子は短絡します。したがって、この場合は次のようになります。

  1. ++a評価されて、a現在は未使用品6です。

  2. (1) の結果が非ゼロだったので、 の右側&&が評価されます。ということは++b、そうbなる11

  3. (1) と (2) はカンマ演算子の左側なので、結果&&は破棄されます。(それ1があなたにとって重要であれば、それはです)。

  4. 最初の++a右側,が評価されます。 aです7

  5. への代入tが行われます -tは今7、最初のコンマ演算子の結果です。

  6. それはすべて別のカンマ演算子の左側だったので、結果 ( 7) は破棄されます。次に++a評価です。 aです8

  7. aは 0 ではないため、短絡||し、++cは評価されません。cとどまります15

結果: tis 7ais 8bis 11、およびcis 15printfステートメントは次を出力します。

7  8  11 15

全体として、このコードは、次のように記述した方が理解しやすいでしょう。

++a;
++b;
t = ++a;
++a;

これはまったく同じ動作をします。

于 2013-06-05T05:29:28.140 に答える