首页 > 解决方案 > I_n_test = I_N 在 for 循环中是什么意思?

问题描述

我试图在这里理解代码:http: //devernay.free.fr/vision/src/prosac.c

主要是因为我想把它翻译成python。

这是一个片段:

for(n_test = N, I_n_test = I_N; n_test > m; n_test--) { 
  // Loop invariants:
  // - I_n_test is the number of inliers for the n_test first correspondences
  // - n_best is the value between n_test+1 and N that maximizes the ratio                       
  I_n_best/n_best
  assert(n_test >= I_n_test);
  ...
  ...
  // prepare for next loop iteration
  I_n_test -= isInlier[n_test-1];
} // for(n_test ...

那么这I_n_test = I_N;在循环语句中做了什么?

是停止条件吗?不应该是"=="这样吗?

标签: cloopsfor-loopsyntax

解决方案


你可以阅读

 for(n_test = N, I_n_test = I_N; n_test > m; n_test--)

作为

 for (initialization ; loop-checking condition; increment/decrement)

从规范,章节§6.8.5.3C11

该声明

  for ( clause-1 ; expression-2 ; expression-3 ) statement

行为如下: 表达式expression-2是在每次执行循环体之前计算的控制表达式。每次执行循环体后,表达式expression-3被评估为 void 表达式。ifclause-1是一个声明,它声明的任何标识符的范围是声明的其余部分和整个循环,包括其他两个表达式;它在控制表达式的第一次评估之前按照执行顺序到达。Ifclause-1是一个表达式,它在控制表达式的第一次评估之前被评估为一个 void 表达式。

因此,根据语法,n_test = N, I_n_test = I_N是包含初始化语句的表达式。它们由逗号分隔。


推荐阅读