C:对于循环变量,因为它自己的停止条件?

时间:2014-02-16 03:43:26

标签: c shell loops for-loop

我正在构建一个基本shell,并试图理解一个基本的for循环。我很困惑,因为我习惯于在条件为假时停止循环,但似乎以下for循环有p有它自己的停止条件?

void spawn_job(job_t *j, bool fg) 
{
pid_t pid;
process_t *p;

    for(p = j->first_process; p; p = p->next) {
         ...
    }
 }

Intuition告诉我,一旦达到某个进度数,for循环就会停止,但我对这个逻辑的表达感兴趣 - 这是如何工作的?我是不是在循环的每次迭代后重置p?为什么不写成p =某个数字?

3 个答案:

答案 0 :(得分:3)

这是遍历linked list的标准方式。当p求值为false时,循环终止。在C中,任何非0的值都为真。 P是指向链表节点的指针,当它为NULL时将变为false。你可以用这样更清晰的方式重写这个:

process_t *p;

for(p = j->first_process; p != NULL; p = p->next) {
     ...
}

答案 1 :(得分:1)

for(p = j->first_process; p; p = p->next) {
     ...
}

相当于

p = j->first_process
while(p) {
     ...
     p = p->next;
}

答案 2 :(得分:0)

在C中,如果将指针传递给条件(在if,for或while循环中),它将测试该指针是否为NULL。

所以这些:

proccess_t *p;

if(p){ ... }
for(p = ...; p; ...){ ... };

等同于这些

if(p != NULL){ ... }
for(p = ...; p != NULL; ...){ ... };