C中的Double For Loop语法

时间:2017-04-22 16:14:45

标签: c loops for-loop syntax

我是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循环似乎没有条件。我不确定它是否是语法快捷方式,或者如果有特殊的循环我找不到在线资源。

3 个答案:

答案 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
  1. 这里他们正在考虑两个变量来跟踪。
  2. 单个for loop
  3. 中不是两个for循环
  4. 这样做的原因是每次迭代都要初始化和更新变量。
  5. 如果您在for loop内使用多个类型变量进行初始化
  6. ,则可能会遇到问题