我正在研究讲师的 C 语言的哈希表代码。有两个我以前从未见过的:
for(;t!=NULL;t=t->next)
和
for(;*s;s++)
好吧,它不像以前我所知道的那样普通:
for(value first; value last; value ++ / --)
请提供适合的实例。
答案 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--)