int c;
while((c=10)>0)
c = 10
は何に評価されていますか?値10が変数cに正常に割り当てられたことを示す1か、それとも10ですか?どうして?
int c;
while((c=10)>0)
c = 10
は何に評価されていますか?値10が変数cに正常に割り当てられたことを示す1か、それとも10ですか?どうして?
c = 10は10を返す式で、cに10を代入します。
割り当ては、割り当てられた値で戻ります。この場合、c=10
は10です.10!= 0であるため、cではtrueも意味します。したがって、これは無限ループです。
あなたは
while(10)
を記述しますプラスあなたは割り当てを作ったみたいです。
あなたはこのロジックに従えば、あなたは
while(c=0)
は決してその文またはブロックを実行しないループになる、ことがわかります。
これは無限ループです。最初に10をcに代入し、それをc> 0と比較してから再びループを開始し、10にcを代入し、c> 0などと比較します。ループは決して終わらない。これは、次と同等です:
while(c=10);
/* Because c assign a garbage value, but not true for all cases maybe it assign 0 */
while(c);
編集:それはtrueを返すか、代わりに10
Cにガベージ値が割り当てられるのはなぜですか? –
これはまだ初期化されておらず、コンパイラは自動的にこれにいくらかの値を割り当てます。 –
'c = 10'を初期化する前にメモリ内のすべてのアドレスがある値を持つので、' c'に値 '10'を割り当てませんか? –
while((c=10)>0)
c = 10
の1ので、それは、コンパイラのリターンのみ真または偽の値ので、10を返しませんshould返品10
。今
は、while(10>0)
10>0
ため、>
オペレータが1
(非ゼロ値)を返します。
それは、それがCに10を割り当てる場合C99 6.5.16
An assignment operator stores a value in the object designated by the left operand. An
assignment expression has the value of the left operand after the assignment, but is not an
lvalue.
に言ったが、C = 10リターン1はすべきですか? – user2131316
それは良いことではないでしょう、文a = c = 10について考えてみましょう。あなたは1ではなく10になりたいですか? – Bathsheba
@ user2131316:*式* 'c = 10'は代入後の値が' c'です([N1570](http://www.open-std.org/jtc1/sc22/wg14/www/docs/) n1570.pdf)、6.5.15/3)。代入式はブール式ではありません。 –