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。由於問題明確表達和格式良好,我認爲沒有理由下調。迷惑或不知道某事是提問的全部目的。 –