函数指针的取消引用
当我浏览 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
?
When I was browsing the Linux code I encountered the following snippet :
static void __init do_initcalls(void)
{
initcall_t *fn;
for (fn = __early_initcall_end; fn < __initcall_end; fn++)
do_one_initcall(*fn);
}
initcall_t
is a function pointer .
The prototype of do_initcalls
is int do_one_initcall(initcall_t fn)
.
So I thought invoking do_initcalls
would be like do_one_initcall(fn)
but I see it is do_one_initcall(*fn)
. Why is that *fn
instead of only fn
??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于
initcall_t
本身定义为函数指针,因此initcall_t *fn
声明了一个指向函数指针的指针,因此应用了*
解引用运算符来获取函数指针。以下是
initcall_t
类型的定义:因此,
initcall_t
类型已经是一个指针。Because
initcall_t
is itself defined as a function pointer,initcall_t *fn
declares a pointer to a function pointer, and thus the*
dereferencing operator is applied to get the function pointer.Here is the definition of the
initcall_t
type:So the type
initcall_t
is already a pointer.