如何定义返回指向函数的指针的函数的指针?

5
如何定义一个返回函数指针的函数指针?
typedef int(*a)(int,int);
a (*b)(int,int);

为什么这个可以工作,但以下的不能工作?
(int(*a)(int,int) ) (*b)(int,int);

或者

int(*)(int,int) (*b)(int,int);

或者

( int(*)(int,int) ) (*b)(int,int);

如果可以的话,还是坚持使用typedef吧。没有它,语法会变得非常混乱,以至于我不想在手机上尝试回答,以免搞砸。 - Chris Lutz
1个回答

4

以下是正确的方法:

int (*(*b)(int,int))(int,int);

你可以编译下面的代码,演示使用这两种方法。个人而言,我会使用typedef方法来提高清晰度。
#include <stdio.h>

int addition(int x,int y)
{
    return x + y;
}

int (*test(int x, int y))(int,int)
{
    return &addition;
}

typedef int (*a)(int, int);

int main()
{
    a (*b)(int,int);
    int (*(*c)(int,int))(int,int);
    b = &test;
    c = &test;
    printf(b == c ? "They are equal!\n" : "They are not equal :(\n");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接