我是 C 新手,必须编写一些模拟给定函数的代码。但是,我很难明确地理解这段代码中的第二个 for 循环正在做什么。该语法似乎不遵循以下循环语法的标准:
for ( init; condition; increment ) {
statement(s);
}
这是我正在检查的代码,这是我没有遵循的第二个 for 循环,并且我没有看到任何在线版本
for (i = 0; i <= (n1-n2); i++){
count=0;
for(j = i,k = 0; k < n2; j++,k++){
if (*(s1+j)!=*(s2+k)){
break;
}
else
count++;
if(count==n2)
total++;
}
}
我假设它是两个 for 循环合二为一,因为有两个增量。我认为不等式类似于“while 循环”,但我不确定。令人困惑的是 j 循环似乎没有条件。我不确定这是否是一个语法快捷方式,或者是否有一个特殊的循环,我无法找到在线资源。
我假设它是两个 for 循环合二为一,因为有两个增量。
嗯,不是真的。第二for
循环也遵循规定的语法,只是在处理循环相关变量方面有点花哨。
对于像这样的循环语句
for(j = i,k = 0; k < n2; j++,k++){
可以解释为
for( (j = i,k = 0) ; (k < n2) ; (j++,k++) ){
^^^^^^^^^^^ ^^^^^^ ^^^^^^^
init condition post loop body operation.
现在,初始化和后体表达式块利用逗号运算符.
相关,引用C11
,第 §6.5.17 章
逗号运算符的左操作数被计算为 void 表达式;有一个
其求值与右操作数的求值之间的序列点。然后右边的
计算操作数;结果有其类型和值。
为了详细说明,相同的语法可以分解为
j = i; //initialization, only once
for( k = 0 ; k < n2 ; k++ ){ // good ol' syntax
//......loop body
j++; //last expression in the body.
} //end of loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)