0x008004A2+ 8 = 0x008004AA,你应该晓得这个地址里面放的是什么,所以外面做了一个类型强转,(void **),这个转换告诉我们,0x008004AA是个二级指针值,这个地址下放的是一个指针,现在我们需要里面的指针,于是就有了*(void **)。
完整的过程是这样的:
//得到一个指针,到底是几维呢?无所谓,这里我们是拿它当二维指针来用的,为啥呢?
// 前面说过了,他们是子模块配置的指针���数组!
confp =*(void **) ((char *) cf->ctx + cmd->conf);
conf = confp[ngx_modules[i]->ctx_index]; // 拿到配置结构
rv =cmd->set(cf, cmd, conf); // 做处理
最后说明一下,开始提到的那个void ****类型成员,使用这种类型的原因我们可以在ngx_events_block函数中找到答案。