条件检入C中的循环

gui*_*eek 0 c for-loop

假设我有一个字符串"str".我的for循环如下:

 for(i=0;i<strlen(str);i++){

    //do stuff

 }
Run Code Online (Sandbox Code Playgroud)

问题:当检查条件时,i <strlen(str),是每次循环运行时计算的strlen(str)部分吗?或者它被存储并且仅在第一次计算?

Ósc*_*pez 5

在一个循环的条件表达式将在每一个迭代得到评估-这是这个样子,直到(理想)的表达式为假.所以是的: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)

  • 如果确实大多数网站都将strlen置于这种状态,那么这仅仅证实了大多数网站都是不良信息来源的观察结果. (2认同)