Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对于(间隙=n/2;间隙>0;间隙/=2)不带“的&引用;最后_C - Fatal编程技术网

C 对于(间隙=n/2;间隙>0;间隙/=2)不带“的&引用;最后

C 对于(间隙=n/2;间隙>0;间隙/=2)不带“的&引用;最后,c,C,我在“C编程语言第2版”中阅读了以下代码 /*shellsort:sort v[0]。。。v[n-1]为递增顺序*/ 无效外壳排序(int v[],int n){ 内部间隙,i,j,温度; 对于(间隙=n/2;间隙>0;间隙/=2) 对于(i=间隙;i=0&&v[j]>v[j+gap];j-=gap){ 温度=v[j]; v[j]=v[j+gap]; v[j+间隙]=温度; } } 让我困惑的是,在“for loop line”的末尾没有“;”,我想应该是这样的 for (gap =

我在“C编程语言第2版”中阅读了以下代码

/*shellsort:sort v[0]。。。v[n-1]为递增顺序*/
无效外壳排序(int v[],int n){
内部间隙,i,j,温度;
对于(间隙=n/2;间隙>0;间隙/=2)
对于(i=间隙;i=0&&v[j]>v[j+gap];j-=gap){
温度=v[j];
v[j]=v[j+gap];
v[j+间隙]=温度;
}
}
让我困惑的是,在“for loop line”的末尾没有“;”,我想应该是这样的

    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(间隙=n/2;间隙>0;间隙/=2);
对于(i=间隙;i=0&&v[j]>v[j+gap];j-=gap){
温度=v[j];
v[j]=v[j+gap];
v[j+间隙]=温度;
}

我怎样才能直观地概括它呢?

for循环以适当的次数运行代码中的下一条语句。此语句通常是一条语句,或者是一组用花括号括起来的语句。如果改为使用分号,它将被视为一个,因此“不做任何事情”的次数是适当的

如果你解释一下你说“我怎样才能直观地概括它?”的意思,那可能会更容易回答你的问题。

for (gap = n/2; gap > 0; gap /= 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)
    ;
for (gap = n/2; gap > 0; gap /= 2)
{
}

换句话说,这是一个空循环,除了每次迭代的比较
gap>0
gap/=2
(循环的一部分)之外,它什么也不做

不是嵌套的for循环。这相当于:

for (....) ;
for (....) ;


A
for()
语句后的code>表示循环体是空语句。格式设置使它假定它是嵌套的for循环,但它不是。首先,第一个for循环被完全执行,然后下一个for循环才会开始。因为没有人明确地说:你的假设是错误的,这本书是正确的。如果您放置
字符在您建议的位置,代码将不再执行shell排序,因为外部循环将在没有任何正文的情况下运行,而内部循环只运行一次。您真正困惑的是没有{在for语句之后。许多程序员认为应该有,尽管这不是必须的。把你自己算在那群人的一部分,如果它在那里,你就不会问这个问题。@HansPassant是的,该死的牙套垃圾邮件发送者……那些用#LOCs付费的家伙。恶心!
for (....) ;
for (....) ;
for (....) {}
for (....) {}