0
假设我有一个字符串“str”。 我的for循环如下:条件检查for循环在C
for(i=0;i<strlen(str);i++){
//do stuff
}
问题:当条件被选中,我<的strlen(STR),是的strlen(STR)部分每次循环运行计算的?或者它被存储并且仅在第一次计算?
假设我有一个字符串“str”。 我的for循环如下:条件检查for循环在C
for(i=0;i<strlen(str);i++){
//do stuff
}
问题:当条件被选中,我<的strlen(STR),是的strlen(STR)部分每次循环运行计算的?或者它被存储并且仅在第一次计算?
循环中的条件表达式将在每次迭代时得到评估 - 它有就是这样,直到(理想情况下)表达式变为false。所以是的:strlen(str)
将被重复计算。如果字符串根本没有改变,将其长度存储在局部变量中会更好。
int n = strlen(str);
for (i=0; i<n; i++) {
// do stuff
}
这也将工作:
for (i=0; str[i] != '\0'; i++) {
// do stuff
}
的是,在大部分我见过他们使用strlen条件在for循环的所有节目的网站。所以我们应该使用变量来做到这一点,对吧?它应该会有更好的表现,尽管非常轻微。 – 2014-09-06 04:53:21
@guitar_geek看看这篇[文章](http://www.cprogramming.com/tips/tip/dont-use-strlen-in-a-loop-condition),它将我的观点带回家。 – 2014-09-06 04:54:41
如果大多数网站确实是这样的情况,这只能证明大多数网站都是不好的信息来源。 – 2014-09-06 05:00:05