我正在学习C编程语言,K&R,第2版,第26页,关于power()函数,我被一些东西弄糊涂了:
int power(int base, int n)
{
int p;
for (p = 1; n > 0; --n)
p = p * base;
return p;
}P是如何递增的?如果for循环“向后运行,直到它变为零”,为什么它是n>0而不是n= 0?
发布于 2017-07-07 05:57:40
p按以下行递增:
p = p * base;您可能会将其理解为“取值p,将其乘以base,然后将其存储到p中”。
如果
循环“向后运行,直到它变为零”,为什么它是n>0而不是n= 0?
for循环中的第二个参数用于确定循环是否应该运行。因此,n > 0意味着“只要n大于0,就运行循环”,而n == 0意味着“只要n等于0,就运行循环”。
这里的预期目的是运行循环n次数。每次从n中减去1,然后在循环变为0时停止循环。这将使n的p乘以base。
发布于 2017-07-07 06:00:50
变量p从不递增。每次循环运行时,它都会乘以base的一个因子。返回值包含所需的功率。
发布于 2017-07-07 07:11:27
for (p = 1; n > 0; --n)我不喜欢这种充满技巧的编程风格,因为它使人们更难理解代码。在这样一个琐碎的例子中,这不是大问题,但在大型和复杂的代码中,让它变得更加复杂和沉重是一种可怕的编程方式
int power(int base, int n)
{
int p = 1;
int x;
for (x = 0; x < n; x++)
p = p * base;
return p;
}它不是更容易阅读吗?如果您担心额外的x变量-请不要担心。它将被编译器优化出来。在K&R时代,如今这样的微优化是必要的,感谢上帝,我们可以专注于有效的算法,把微优化留给编译器-实践表明,他们比99.99%的程序员要好得多
https://stackoverflow.com/questions/44959445
复制相似问题