Jos*_*eph 2 c syntax loops for-loop
我是C的新手,必须编写一些模拟给定函数的代码.但是,我很难理解这段代码中的第二个for循环是什么.语法似乎不符合循环语法的标准:
for ( init; condition; increment ) {
statement(s);
}
Run Code Online (Sandbox Code Playgroud)
这是我正在检查的代码,它是我没有关注的第二个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++;
}
}
Run Code Online (Sandbox Code Playgroud)
我假设它是两个for循环,因为有两个增量.我认为不平等与'while循环'类似,但我不确定.令人困惑的是,j循环似乎没有条件.我不确定它是否是一个语法快捷方式,或者如果有一个特殊的循环我找不到在线资源.
我假设它是两个for循环,因为有两个增量.
好吧,不是真的.第二个for循环也遵循规定的语法,它只是对处理循环相关变量有点花哨.
对于像这样的循环语句
for(j = i,k = 0; k < n2; j++,k++){
Run Code Online (Sandbox Code Playgroud)
可以解释为
for( (j = i,k = 0) ; (k < n2) ; (j++,k++) ){
^^^^^^^^^^^ ^^^^^^ ^^^^^^^
init condition post loop body operation.
Run Code Online (Sandbox Code Playgroud)
现在,初始化和后体表达式块使用逗号运算符.
相关的,引用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
Run Code Online (Sandbox Code Playgroud)