19
#include <stdio.h>

main()
{
    int i;
    for(i=0; i<0, 5; i++)
        printf("%d\n", i);
}

ループi<0, 5の状態の部分がわかりません。for

にしてもi>0, 5、出力に変化はありません。

これはどのように作動しますか?

4

5 に答える 5

17

トピックについて

コンマ演算子は、常にコンマ区切りリストの最後の値を返します。

基本的には、左側の値を評価して破棄し、右側の値を評価して返す二項演算子です。

これらを複数連鎖すると、最終的に連鎖の最後の値が生成されます。

anatolyg のコメントによると、これは、右側の値の前に左側の値を評価する場合に役立ちます (左側の評価に望ましい副作用がある場合)。

たとえばi < (x++, x/2)、左側の値の評価の影響で右側の値に影響を与えるため、その演算子を使用するのは適切な方法です。

http://en.wikipedia.org/wiki/Comma_o​​perator

補足: この好奇心旺盛なオペレーターについて聞いたことがありますか?

int x = 100;
while(x --> 0) {
    // do stuff with x
}

単なる別の書き方x-- > 0です。

于 2012-10-18T16:35:04.413 に答える
10

コンマ演算子はi<0Ori>0を評価し、無視します。したがって、それは常に5状態に存在するものです。

したがって、次のようになります。

for(i=0;5;i++)
于 2012-10-18T16:36:28.887 に答える
4

コマ演算子は、初期化と増分部分に対して実行され、次のようなfor(i=0,j=20;i<j;i++,j--)ことを実行します。比較部分で実行すると、最後の演算子が評価されます(以前に回答済みです)。

于 2012-10-18T16:37:38.457 に答える
3

i<0,5は常に に評価され5、常に正しい式が に対して返されex1,ex2ます。

于 2012-10-18T16:35:28.843 に答える
1

コンマ演算子は、最初のオペランドにいくつかの副作用がある場合を対象としています。これは単なるイディオムであり、コードを読みやすくすることを目的としています。条件付きの評価には影響しません。

例えば、

for (i = 0; i<(i++, 5); i++) {
    // something
}

インクリメントiし、。かどうかを確認しますi<5

于 2012-10-18T16:37:34.030 に答える