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) )
{
}
可以是可以,不过你这是何苦呢?用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)();
}
举个例子吧:
int (*f)(); 第二个括号是函数调用操作符,第一个括号起到聚组作用,迫使间接访问在函数调用之前进行,使f成为一个函数指针,它所指向的函数返回一个整型值。参见《C和指针》,希望有帮助...