( s1[i] = s2[i] ) != '\0'
不等式は または でチェックs2[i]
します'\0'
かs1[i]
?
演算子の優先順位と評価の順序によって、式の評価順序が決まります。
演算子の優先順位は、式を解釈する順序、つまり、どの演算子がどのオペランドに属するかを示します。これは数学的な優先順位に似ています。たとえば、はよりも優先順位が高い1+1*2
ため、4 ではなく 3です。その優先規則により、式は として評価されます。*
+
1+(1*2)
評価の順序は、優先順位とは別のものです。サブ式が評価される順序を示します。別の数学の例: これは常に 3 であることがわかって(1*1) + (1+1)
います。しかし、それを計算するとき、最初に左括弧から始めるか、右括弧から始めるかを決めることができます。演算子の優先順位によって、どちらから開始するかが決まるわけではありません。よりも*
優先順位が高くても+
、最初に右側の式の計算を開始でき、結果には影響しません。
しかし、プログラミングでは、この評価の順序が重要になることがよくあります。この順序を決定するのはコンパイラです。そして、物事を複雑にするために、どのように文書化することなく、ケースバイケースで好きなようにすることが許されています (「不特定の動作」)。
() 演算子は優先順位が最も高いため、( s1[i] = s2[i] )
最初に評価されます。その中のすべてが部分式です。
() サブ式内では、[] 演算子が次に優先されるため、2 つの " s[i]
" が次に評価されます。s[i]
" " もサブ式であり、サブ式の評価順序が指定されていないため、コンパイラは のs1[i]
前または後に自由に評価できることに注意してくださいs2[i]
。
この特定のケースでは、どちらが最初に評価される可能性が高いかは重要ではありません。
() サブ式の内部では、= 演算子が次に来ます。オペランドの内容s2[i]
が にコピーされs1[i]
ます。
() 内のすべての式が評価され、結果が に格納されs1[i]
ます。
最後に、部分式からのこの結果は、式の残りの演算子の 1 つのオペランドです!=
。もう 1 つのオペランドは文字リテラル'\0'
です。