我正在阅读"The GNU C Programming Tutorial",并且我认为我发现了一个非常微小而微妙的错误。这在章节中。在delete_multiples_of_prime(...)
函数中,在for
循环中:
delete_multiples_of_prime (int prime)
{
int index, multiplier = 2;
for (index = prime * multiplier; index < ARRAY_SIZE; index = prime * multiplier++)
sieve[index] = DELETED;
}
我认为问题出现在 for
循环的增量部分。作者使用了后置递增运算符而不是前置递增运算符,因此我认为循环将以初始索引值执行两次。
我的理解正确吗?
注:我相当确定自己是对的,如果我在其他地方找到了这个答案,就不会发帖询问了。当然,即使我是对的,性能差异也可以忽略不计。
for (int index = prime * 2; index < ARRAY_SIZE; index += prime)
。不需要进行太多的乘法运算。 - Jonathan Leffler