我在“ C编程语言版本2”中阅读了以下代码
/* shellsort: sort v[0] ... v[n-1] into increasing order */
void shellsort(int v[], int n) {
int gap, i, j, temp;
for (gap = n/2; gap > 0; gap /= 2)
for (i = gap; i < n; i++)
for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) {
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
}
}
令我困惑的是,这里没有“;”在“ for循环行”的末尾,我认为应该是
for (gap = n/2; gap > 0; gap /= 2) ;
for (i = gap; i < n; i++);
for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) {
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
}
我如何直观地将其包装?
答案 0 :(得分:2)
声明
for (gap = n/2; gap > 0; gap /= 2) ;
等于
for (gap = n/2; gap > 0; gap /= 2)
;
等于
for (gap = n/2; gap > 0; gap /= 2)
{
}
换句话说,这是一个空循环,除了每次迭代比较gap > 0
和gap /= 2
(循环的一部分)之外,什么都不做。
答案 1 :(得分:1)
for
循环以适当的次数运行代码中的下一条语句。通常,该语句是单个语句,或大括号中的一组语句。如果您改用分号,则将其视为null statement,因此“无任何操作”会执行适当的次数。
如果您说“我如何直观地将其包裹起来”是什么意思?这样可能更容易回答您的问题。
答案 2 :(得分:1)
for循环的语法(为清楚起见已简化):
for ( ... ) <statement>
statement:
';' // empty statement
<any other statement>
'{' ... '}' // block of statements
因此,在for语句之后是一个或一个语句块。单个;
是一条语句,即空(不执行任何操作)语句。所以
for (....) ;
for (....) ;
不是 嵌套的for循环。等效于:
for (....) ;
for (....) ;
或
for (....) {}
for (....) {}