首页 > 解决方案 > 有人可以解释这两个 for 循环之间的区别吗?

问题描述

int n = strlen(s)
for (int i = 0; i < n; i++)
{
printf("%c", s[i]);

}

for (int i = 0; i <strlen(s); i++)
{
printf("%c", s[i]);
}

我想问的是内存中发生了什么(引擎盖下)。假设字符串长度为 4,将 4 分配给 n,这会使编译器更容易编译吗?在第二个代码中,编译器是否必须一遍又一遍地检查 s 的字符串长度是多少?第一个代码的重点是让编译器记住字符串长度,所以它不需要每次都检查它。如果我的问题不够清楚,我很抱歉,告诉我如何改进将不胜感激。

标签: c

解决方案


在第二个代码中,编译器是否必须一遍又一遍地检查 s 的字符串长度是多少?

这是完全正确的。for每次迭代都会评估循环的条件。因此,您应该缓存长度(或任何其他在每次迭代中不会改变的结果,就此而言)。

在这种情况下,正如人们指出的那样,您可以更好地避免计算长度,因为无论如何您都在迭代字符串。


推荐阅读