私は次のものを持っています:
int a = 1, b = 2, c = 3, d = 4;
a = b, c = d;
printf("%d, %d, %d, %d", a, b, c, d);
出力は次のとおりです。
2, 2, 4, 4
コンマ演算子は代入演算子とどのように連携しますか?私が知っていることから、次の場合、2番目の式を評価して返します。
(exp1, exp2)
それで、なぜそれは評価するのa = b
でしょうか?
私は次のものを持っています:
int a = 1, b = 2, c = 3, d = 4;
a = b, c = d;
printf("%d, %d, %d, %d", a, b, c, d);
出力は次のとおりです。
2, 2, 4, 4
コンマ演算子は代入演算子とどのように連携しますか?私が知っていることから、次の場合、2番目の式を評価して返します。
(exp1, exp2)
それで、なぜそれは評価するのa = b
でしょうか?
最初のオペランドが評価され、結果が破棄されます。次に、2番目のオペランドが評価され、その結果が式の全体的な結果として返されます。
標準は言う:
コンマ演算子の左側のオペランドは、void式として評価されます。その評価と右オペランドの評価の間にはシーケンスポイントがあります。次に、右のオペランドが評価されます。結果にはそのタイプと値があります。
コンマ演算子は、割り当てよりも優先順位が低くなります。コンマ演算子のすべての式が評価されますが、結果の値として最後の式のみが使用されます。したがって、両方の割り当てが実行されます。あなたの場合のコンマ演算子の結果は、の結果になりますc = d
。この結果は使用されません。
コンマ演算子は、両方のオペランド(左側が最初)を評価し、右側のオペランドの値を返します。これは、割り当てであるオペランドに固有のものではありません。
これは、単一のステートメントとして記述する場合と同じように機能します。
int a = 1;
int b = 2;
int c = 3;
int d = 4;
a = b;
c = d;
詳細については、コンマ演算子も参照してください。
ウィキペディアから:
int a=1, b=2, c=3, i; // comma acts as separator in this line, not as an operator
i = (a, b); // stores b into i ... a=1, b=2, c=3, i=2
i = a, b; // stores a into i. Equivalent to (i = a), b; ... a=1, b=2, c=3, i=1
i = (a += 2, a + b); // increases a by 2, then stores a+b = 3+2 into i ... a=3, b=2, c=3, i=5
i = a += 2, a + b; // increases a by 2, then stores a into i. Equivalent to (i = a += 2), a + b; ... a=3, b=2, c=3, i=3
i = a, b, c; // stores a into i ... a=5, b=2, c=3, i=5
i = (a, b, c); // stores c into i
From what I have known it would evaluate and return the second expression
それは完全に正しいステートメントではありません。はい、2番目は評価されて返されますが、最初は無視されることを暗示しています。
コンマ演算子が機能する方法は、すべての式が評価され、最後の式が返されることです。例えば:
int a, b, c, d = 0;
if(a = 1, b = 2, c = 3, d == 1)
printf("No it isn't!\n")
else
printf("a: %d, b: %d, c: %d, d: %d\n", a, b, c, d);
あなたにあげる:
a = 1, b = 2, c = 3, d = 0
d==1
すべての式が評価されましたが、条件の決定を行うためにのみが返されたためです。
for
...この演算子のより良い使用法は、ループ内にある可能性があります。
for(int i = 0; i < x; counter--, i++) // we can keep track of two different counters
// this way going in different directions.
このコードは次と同等です。
int a = 1;
int b = 2;
int c = 3;
int d = 4;
a = b;
c = d;
コンマの左側の最初の式が評価され、次に右側の式が評価されます。右端の式の結果は、= 記号の左側の変数に格納されます。