假设我有一个字符串" str"。 我的for循环如下:
for(i=0;i<strlen(str);i++){
//do stuff
}
问题:当检查条件时,i&lt; strlen(str),是每次循环运行时计算的strlen(str)部分吗?或者它被存储并且仅在第一次计算?
答案 0 :(得分:5)
循环中的条件表达式将在每次迭代时得到评估 - 具有,直到(理想情况下)表达式变为false。是的:strlen(str)
将一遍又一遍地计算。如果字符串根本没有变化,那么如果将其长度存储在局部变量中,它会更好。
int n = strlen(str);
for (i=0; i<n; i++) {
// do stuff
}
这也有效:
for (i=0; str[i] != '\0'; i++) {
// do stuff
}