C++ 如何返回一个函数指针?

2024-12-14 13:20:16
推荐回答(3个)
回答1:

int f (int a, int b)
{
return 0;

}


int (*Test ()) (int, int)
{
return f;
}

(*Test ()) 为函数部分 *代表返回一个指针类型 Test函数名 ()里面是参数列表

而 int (int, int) 为助记符 修饰返回的指针为一个特定类型的函数指针

另外 可以用函数原型作为参数传递 编译器会自动转化为函数指针

举例如下:

这是原型声明:

void Func (int (int, int)  )//OK
void Func (int (*) (int, int)  )// OK
这是定义:
void Func (int pf(int, int)  )
{

}
void Func (int (*pf) (int, int)  )
{

}

回答2:

可以是可以,不过你这是何苦呢?用typedef定义个类型,后面也很好理解。

不用typedef,要直接写的话,不是找虐吗。

当然,如果是追求GEEK的话,倒是值得研究下。

代码如下,看了这个代码,你就会觉得还是用typedef好了。

#include

void f0(void)
{
    printf("in function f0\n");
}

void f1(void)
{
    printf("in function f1\n");
}

void f2(void)
{
    printf("in function f2\n");
}

void f3(void)
{
    printf("in function f2\n");
}

void (*GetFun(int x))(void)
{
    switch (x)
    {
    case 1:
        return &f1;
        break;
    case 2:
        return &f2;
        break;
    case 3:
        return &f3;
        break;
    default:
        return &f0;
        break;
    }
}

void main(void)
{
    GetFun(0)();
    GetFun(1)();
    GetFun(2)();
    GetFun(3)();
    GetFun(4)();
}

回答3:

举个例子吧:
int (*f)(); 第二个括号是函数调用操作符,第一个括号起到聚组作用,迫使间接访问在函数调用之前进行,使f成为一个函数指针,它所指向的函数返回一个整型值。参见《C和指针》,希望有帮助...