Forループを使用して、ソースインデックスと宛先インデックスを設定し、配列内のアイテムをコピーしています。
for(int src = 0, dst = 8;
src < 8, dst >= 0;
src ++, dst --)
{
arr2[dst] = arr1[src];
}
とにかくそのようなもの。
私の質問は、終了条件についてです。ここには2つあります。 src < 8
およびdst >= 0
。これらの条件はAND-ed(&&
)またはOR-ed(||
)。
さらに説明すると、条件は次のように評価されますか?
(src < 8) && (dst >= 0)
それとも、このように評価されていますか?
(src < 8) || (dst >= 0)
それともまったく違うものですか?論理的に行うことは、上記で指定した2つの方法のいずれかを評価することであり、他の方法ではないと思います。
コンマ演算子は正しい式の値を返すので、次のように記述します。
src < 8, dst >= 0;
条件はdst >= 0
を書くのと同じです。この場合、src < 8
は2番目の条件とは別に評価されるため、完全に無視され、2番目の条件が返されます。これはANDまたはORに評価されませんが、実際には最初のチェックを完全に「破棄」する効果があります。
これを正しく評価したい場合は、2つのオプションのいずれかを使用する必要があります(||
または&&
を介して動作を明示的に指定します)。
詳細については、 コンマ演算子 :を参照してください。
式のセットで値を評価する必要がある場合は、右端の式のみが考慮されます。
コンマ演算子は最初の式を評価し、結果を破棄します。次に、2番目を評価し、それがifでテストされた値です。あなたの状態は&&でも||でもないことがわかりますただし、if(dst> = 0)とまったく同じように動作します。このフォームは、テストが実行される前にループの最後で値を変更するのに役立つ場合があります。