我遇到了这段代码
for(; tail < len;tail++){
str[tail] = 0;
为什么有一个“;” 就在“for(”之后?
当我把它拿出来时,它出现了几个错误。
这意味着没有初始化(它已经在前面的行中完成了)。
通常,for 循环具有以下语法:
for (initialization; termination; increment) {
statement(s)
}
所有三个表达式(初始化、终止和增量)都是可选的,但分号必须存在。您拥有的代码等效于以下 while 循环:
while (tail < len) {
str[tail] = 0;
tail++;
}
在 for 循环中缺少所有三个表达式的情况也很常见:
for (;;) {
// something
}
这是一个无限循环,相当于:
while (true) {
// something
}
for 循环在其括号内接受三个参数:
第一个是启动块,您可以在其中创建仅在 for 循环范围内存在的变量(从左括号到右括号,或者在您的情况下为 for 循环之后的那一行);
第二个是条件块,您可以在其中指定 for 循环应该运行的条件
第三是后处理块,在 for 循环中的每次迭代之后应该发生什么。
这些块用分号分隔,每一个都是可选的。
通常你有
for(int i=0; i<10; i++);
但你可以拥有
int i =0;
for(; i<10; i++);
你甚至可以有一个这样的循环:
for(;;);
常规 for 循环的语法是for (initialization; termination; increment)
. 因此,必须预先设置所有三个组件,以便 for 循环有效并编译。
for 循环包含三个部分:
for (initialization; condition; update)
其中任何部分都可以省略。
在您的示例中,没有初始化部分(假设tail
并且len
已经设置为合理的值)。
这是因为你有 for 循环语法
int tail;
for(tail = 0;tail < len;tail++)
{
str[tail] = 0; }
第一个参数是初始化器,所以如果你已经初始化了变量,那么你保持空初始化器空间并放置分号。
for(initialize the variable; condition to variable;increment in variable);
for (;condition;increment);
意味着这里没有初始化。
这意味着您不初始化任何东西。通常,它类似于
for(i=1;i<something;i++)
在您的情况下,部分i=1
(初始化)被省略,这是完全正确的。但是,必须有分号来分隔 for 循环的初始化部分和条件部分。
tail 必须在代码中 for 上方的某个位置初始化。这不是语法错误,它只是一个没有初始化的 for。
定义的 for 循环意味着该变量tail
先前已被声明(并希望被初始化)