取消引用函数指针

时间:2011-10-16 14:26:30

标签: c linux linux-kernel

当我浏览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 ??

1 个答案:

答案 0 :(得分:4)

因为initcall_t本身被定义为函数指针,initcall_t *fn声明了一个指向函数指针的指针,因此应用*解引用运算符来获取函数指针。

以下是initcall_t类型的定义:

typedef int (*initcall_t)(void);

因此类型initcall_t已经是指针。