2

我遇到了这段代码

for(; tail < len;tail++){
        str[tail] = 0;

为什么有一个“;” 就在“for(”之后?

当我把它拿出来时,它出现了几个错误。

4

9 回答 9

9

这意味着没有初始化(它已经在前面的行中完成了)。

通常,for 循环具有以下语法:

for (initialization; termination; increment) {
    statement(s)
}

所有三个表达式(初始化、终止和增量)都是可选的,但分号必须存在。您拥有的代码等效于以下 while 循环:

while (tail < len) {
    str[tail] = 0;
    tail++;
}

在 for 循环中缺少所有三个表达式的情况也很常见:

for (;;) {
    // something
}

这是一个无限循环,相当于:

while (true) {
    // something
}
于 2012-09-06T06:17:04.000 回答
1

for 循环在其括号内接受三个参数:

第一个是启动块,您可以在其中创建仅在 for 循环范围内存在的变量(从左括号到右括号,或者在您的情况下为 for 循环之后的那一行);

第二个是条件块,您可以在其中指定 for 循环应该运行的条件

第三是后处理块,在 for 循环中的每次迭代之后应该发生什么。

这些块用分号分隔,每一个都是可选的。

通常你有

for(int i=0; i<10; i++);

但你可以拥有

int i =0;
for(; i<10; i++);

你甚至可以有一个这样的循环:

for(;;);
于 2012-09-06T06:18:24.617 回答
1

常规 for 循环的语法是for (initialization; termination; increment). 因此,必须预先设置所有三个组件,以便 for 循环有效并编译。

于 2012-09-06T06:17:50.040 回答
1

for 循环包含三个部分:

for (initialization; condition; update)

其中任何部分都可以省略。

在您的示例中,没有初始化部分(假设tail并且len已经设置为合理的值)。

于 2012-09-06T06:18:16.340 回答
0

这是因为你有 for 循环语法

int tail;

for(tail = 0;tail < len;tail++)
{
str[tail] = 0; }

第一个参数是初始化器,所以如果你已经初始化了变量,那么你保持空初始化器空间并放置分号。

于 2012-09-06T06:29:34.373 回答
0
for(initialize the variable; condition to variable;increment in variable);

for (;condition;increment);

意味着这里没有初始化。

于 2012-09-06T06:22:12.613 回答
0

这意味着您不初始化任何东西。通常,它类似于

for(i=1;i<something;i++)

在您的情况下,部分i=1(初始化)被省略,这是完全正确的。但是,必须有分号来分隔 for 循环的初始化部分和条件部分。

于 2012-09-06T06:17:14.960 回答
0

tail 必须在代码中 for 上方的某个位置初始化。这不是语法错误,它只是一个没有初始化的 for。

于 2012-09-06T06:17:55.747 回答
0

定义的 for 循环意味着该变量tail先前已被声明(并希望被初始化)

于 2012-09-06T06:18:07.777 回答