次のコードは私を混乱させています
int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);
出力が3,5,8になることを期待しました。これは、主にa ++が3に等しい2 +1を意味し、3 + 5が8に等しいため、3,5,8を期待しました。結果は3,5,7であることがわかります。これが事実である理由を誰かが説明できますか?
これはc = a++ + b
として解析され、a++
はポストインクリメントを意味します。つまり、a
の値を取得してa + b == 2 + 5
を計算した後にインクリメントします。
neverこのようなコードを書いてください。
Maximal Munch Rule はそのような式に適用され、それに従って、式は次のように解析されます。
c = a++ + b;
つまり、a
はポストインクリメントされます(a++
)なので、a
の現在の値(ポストインクリメントの前)が+
b
を使用した操作。
a ++はpost増分です。つまり、式はaの値を取り、thenは1を加算します。
c = ++ a + bはあなたが期待することをします。
これは悪いプログラミングスタイルの例です。
まったく判読できませんが、a
の増分をポストするため、a
の現在の値をb
に合計し、その後、a
を増分します。
最長一致 ルールによると、コンパイラの字句解析フェーズでa ++ + + bとして解析されます。したがって、結果の出力。
a ++は式の後に評価されます。
c = ++ a + b;あなたが考えたことをあなたに与えるでしょう。
ポストインクリメント演算子a ++は、式でaの値が評価された後で、aのtge値を変更します。 aの元の値は2であるため、cの計算に使用されます。 aの値は、++の評価後に新しい値を反映するように変更されます。
a ++ + b ..itは結果7を返し、aの式の値が3に更新された後、ポストインクリメント演算子のため
ここでc = a +++ b; c =(a ++)+ b;つまり、ポストインクリメント。 a ++では、a、b、cを印刷する次のステップで変更が行われます。 ++ aでは、つまり、prefix-incrementの変更は同じステップで行われ、出力は8になります。