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(可能是正数或负数),那么它将始终为真,但当它变为 0 时,循环将终止

对于前缀和后缀......你应该记住,在(--变量)或(++变量)情况下,变量将首先递增或递减,然后检查,但在(变量--)或(变量++)情况下变量将在以后增加或减少,但首先检查

于 2012-11-23T05:06:26.690 回答