C语言遍历数组

最近在看nginx的源码,其中有段代码如下:

    ngx_max_module = 0;
    for (i = 0; ngx_modules[i]; i++) {
        ngx_modules[i]->index = ngx_max_module++;
    }


ngx_modules[]数组的定义如下:

ngx_module_t *ngx_modules[] = {
    &ngx_core_module,
    &ngx_errlog_module,
    &ngx_conf_module,
    &ngx_events_module,
    &ngx_event_core_module,
    &ngx_epoll_module,
    &ngx_http_module,
    //.省略
    NULL
}

for循环中靠什么来判断何时终止遍历呢?for循环语句表达如下:

for (表达式1; 表达式2; 表达式3)
语句

从语法角度看,for 循环语句的3 个组成部分都是表达式。最常见的情况是,表达式1
与表达式3 是赋值表达式或函数调用,表达式2 是关系表达式。
由于在C语言中,关系表达式的值是非NULL和1代表真,NULL和0代表假。因此,由于ngx_modules[]数组的最后一个元素是NULL,因此在遍历到最后一个元素的时候,关系表达式的值为假,循环结束。

除非注明,本博客文章均为原创,转载请以链接形式标明本文地址
本文地址: http://blog.cnwyhx.com/?p=215

Leave a Reply