不明白这种语法

时间:2010-02-16 09:35:33

标签: c syntax

鉴于这个循环,为什么最后会出现一个半冒号?

for(s = string; *s == ' '; s++)
    ;

感谢

编辑*所以可以反转这个程序,使它从一个字符串的末尾开始并检查一个空格并减少直到找到一个字符串吗?

7 个答案:

答案 0 :(得分:6)

这是一个空洞的陈述,这是C中的无操作。就好像你说过:

for(s = string; *s == ' '; s++)
{
    // do nothing
}

当所有事情都可以在for( ... )构造本身完成时使用它 - C语法要求有一个受控语句,但没有任何东西可以做。

答案 1 :(得分:3)

分号表示循环内部没有任何操作。在你的代码中,循环只是循环,直到字符串中的字符不是空格。也就是说,在该行之后,s指向字符串中不是空格的第一个字符。

答案 2 :(得分:3)

分号在循环中生成一个空语句。此循环搜索char中的第一个非空白string

答案 3 :(得分:1)

因为在C(和其他人)中语法是: for(init; condition; step)    体

body可以是一个闭包({}中的一段代码),但是body也可以是空的;

答案 4 :(得分:1)

我想指出循环可以像这样编写,以使其更加清晰,并提高可读性:

 for(s = string; *s == ' ';)
     s++;

或使用while循环:

 s = string;
 while(*s == ' ')
     s++;

但我认为空体的第一种方法更像是“c-idiomatic”(并且更难阅读)。

答案 5 :(得分:0)

它导致循环无效。所有发生的事情都是指针前进。

答案 6 :(得分:0)

必须有一个语句或块作为for循环的“主体”。这是每次循环执行的内容(只要s仍指向空格)。

分号本身就是语句 - 也就是说,循环体中没有任何反应,只有s++循环线上的for