0

次の使用法に関して、-iがtrueと評価される方法と、ループがいつ終了するかを決定するものがわかりません。

while (--i) {
    k = p[i];
    p[i] = p[j = random() % B];
    p[j] = k;
}

私が理解しているように、-プレフィックスがループを開始する前にiの値をデクリメントしている場合、true =value>1およびfalse=0を評価し、値が0に達するとループが終了しますか?おそらく私は自分の質問に答えましたが、誰かがこれについて私に教えてくれるなら。また、デクリメント演算子がサフィックスの場合、このループはどのように動作しますか?

4

2 に答える 2

4

はい、プレフィックスデクリメントは変数をデクリメントし、式からの戻り値(結果)が条件に使用されます。

ループは、にiなると終了します(そして、条件の戻り値に1デクリメントされます)。0

于 2012-11-23T03:07:43.767 に答える
1

あなたがあなたのコードを定義したので、私はそれが完全にiの値に依存していると言うことができます。 最初にi=0の値の場合、-iが-1になるため、無限ループなります。これは、whileループの真の条件になります。

したがって、iの値が0以外の場合(正または負の場合があります)、常にtrueになりますが、0になると、ループは終了します。

接頭辞と接尾辞の場合... (-変数)または(++変数)の場合、変数は最初にインクリメントまたはデクリメントされてからチェックされますが、(変数-)または(変数++)の場合は変数は後でインクリメントまたはデクリメントされますが、最初にチェックされます

于 2012-11-23T05:06:26.690 に答える