C 中返回函数指针的函数指针的语法

发布于 2024-12-24 20:53:36 字数 80 浏览 2 评论 0原文

如何声明一个指向返回另一个函数指针的函数的指针? 请与我分享语法和示例代码片段。

另外,在什么情况下会使用返回函数指针的函数指针?

How to declare a pointer to a function returning another function pointer?
Please share with me the syntax and an example code snippet.

Also, in which scenario would a function pointer returning a function pointer be used?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

泛泛之交 2024-12-31 20:53:36

这对于 typedef 来说很简单:

typedef int(*FP0)(void);
typedef FP0(*FP1)(void);

FP1 是指向返回 FP0 类型函数指针的函数的指针类型。

至于什么时候有用,那么,如果您有一个返回函数指针的函数并且需要获取或存储指向该函数的指针,那么它很有用。

This is trivial with typedefs:

typedef int(*FP0)(void);
typedef FP0(*FP1)(void);

FP1 is the type of a pointer to a function that returns a function pointer of type FP0.

As for when this is useful, well, it is useful if you have a function that returns a function pointer and you need to obtain or store a pointer to this function.

会傲 2024-12-31 20:53:36

如果你避免使用typedef,那就很难了。例如,考虑 C 标准中的 signal()

extern void (*signal(int, void (*)(int)))(int);

void handler(int signum)
{
    ...
}

if (signal(SIGINT, SIG_IGN) != SIG_IGN)
    signal(SIGINT, handler);

使用 typedef,更容易:

typedef void Handler(int);
extern Handler *signal(int, Handler *);

void handler(int signum)
{
    ...
}

if (signal(SIGINT, SIG_IGN) != SIG_IGN)
    signal(SIGINT, handler);

请注意,对于 signal() 函数,您通常只需使用 并让系统负责声明它。

If you avoid using typedef, it is hard. For example, consider signal() from the C standard:

extern void (*signal(int, void (*)(int)))(int);

void handler(int signum)
{
    ...
}

if (signal(SIGINT, SIG_IGN) != SIG_IGN)
    signal(SIGINT, handler);

Using typedefs, it is easier:

typedef void Handler(int);
extern Handler *signal(int, Handler *);

void handler(int signum)
{
    ...
}

if (signal(SIGINT, SIG_IGN) != SIG_IGN)
    signal(SIGINT, handler);

Note that for the signal() function, you would normally simply use <signal.h> and let the system worry about declaring it.

最美的太阳 2024-12-31 20:53:36

如果您不需要第二个 typedef,

typedef float(*(*fptr_t)(int))(double)

则这意味着“将 fptr_t 声明为指向函数 (int) 的指针,返回指向返回 float 的函数 (double) 的指针" (fptr_t : int → (double → float))

If you don't want a second typedef,

typedef float(*(*fptr_t)(int))(double)

this means "declare fptr_t as pointer to function (int) returning pointer to function (double) returning float" (fptr_t : int → (double → float))

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