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