函数指针的取消引用

发布于 2024-12-10 04:38:47 字数 503 浏览 1 评论 0原文

当我浏览 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

装迷糊 2024-12-17 04:38:47

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

以下是 initcall_t 类型的定义:

typedef int (*initcall_t)(void);

因此,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:

typedef int (*initcall_t)(void);

So the type initcall_t is already a pointer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文