这个陈述是做什么的?

时间:2013-11-19 02:43:25

标签: c for-loop

我正在研究讲师的 C 语言的哈希表代码。有两个我以前从未见过的:

for(;t!=NULL;t=t->next)

for(;*s;s++)
好吧,它不像以前我所知道的那样普通:

for(value first; value last; value ++ / --)

请提供适合的实例。

4 个答案:

答案 0 :(得分:2)

for(;t!=NULL;t=t->next)

这个循环意味着你已经在某处删除并初始化了,所以你不需要再次初始化。

for(;*s;s++)

除了终止条件外,此循环完全相同。对于循环终止,*s的值应为零。

实际上for循环的语法是:

for(initialization;boolean_condition;updation)

任何字段都可以为空,如果布尔条件为false,则循环终止。

答案 1 :(得分:1)

For循环是

for(INIT; COND; AFTERTHOUGHT) {
    CODE
}

INIT块仅在循环开始时运行一次

COND块在每次迭代后运行,并检查是否需要继续此循环

每次迭代后运行

AFTERTHOUGHT块来更新某些值,如计数器

在你的情况下

for(;t!=NULL;t=t->next)

没有INIT块。好像它是在这个循环之前完成的,如

Node *t = pointerToRootNode;
for(; t!=NULL; t=t->next) {
   // deal with t->data i guess
}

在第二种情况下

for(;*s;s++)

也没有INIT块。在COND块中只取消引用s指针。看看这个例子。

const char* some_str = "ab";
char* s = some_str;
if (*s) {
    puts("It will be printed")
    s++;
}
if (*s) {
    puts("It will be printed too");
    s++;
}
if (*s) {
    puts("It will never be printed because *s == 0 i.e end of string");
}

答案 2 :(得分:0)

第一个遍历链表直到它到达最后,这是你可以添加下一个节点的地方。

第二个做了类似的概念,除了它在取消引用指针时寻找零值。

答案 3 :(得分:0)

for(;t!=NULL;t=t->next) or for(;*s;s++)

=>初始条件不是必需的(假设t在其他地方声明)

for(int i = 10; i > 0 ; i --)

=> int i = 0; for (; i > 0; i--)