我是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循环似乎没有条件。我不确定它是否是语法快捷方式,或者如果有特殊的循环我找不到在线资源。
答案 0 :(得分:6)
我假设它是两个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.
现在,初始化和后体表达式块使用comma operator。
相关,引用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
答案 1 :(得分:3)
您可以在单个for
循环中进行多次初始化和增量,与示例完全相同(以逗号分隔)。
for(first = 0, second = 0 ; your_condition ; ++first, ++second)
...
当您需要在for
循环中每次更新多个变量时,这非常有用。
希望这有帮助!
答案 2 :(得分:0)
for(j = i,k = 0; k < n2; j++,k++){
initialisation condition increment or decrement
for loop
for loop
内使用多个类型变量进行初始化