1
当我在浏览Linux的代码中,我遇到了下面的代码片段:取消引用函数指针的
static void __init do_initcalls(void)
{
initcall_t *fn;
for (fn = __early_initcall_end; fn < __initcall_end; fn++)
do_one_initcall(*fn);
}
initcall_t
是一个函数指针。
do_initcalls
的原型是int do_one_initcall(initcall_t fn)
。
所以我认为援引do_initcalls
就像do_one_initcall(fn)
但我看到它是do_one_initcall(*fn)
。那为什么*fn
而不是fn
?
你为什么这么认为?你自己说过:'do_one_initcall'需要一个'initcall_t'类型的参数。然而你不知何故会传递一个'initcall_t *'参数给它。为什么?如果期望一个'initcall_t',你必须传递'initcall_t'。就这样。如果不了解你问的是什么奇怪的逻辑,就无法回答你的问题。为什么要将'initcall_t *'传递给需要'initcall_t'的函数呢? – AnT
OMG谁upvotes?! – nc3b
@ nc3b:我提高了它以补偿downvote。由于问题明确表达和格式良好,我认为没有理由下调。迷惑或不知道某事是提问的全部目的。 –