所谓函数指针,它是一种指针。通过他可以像函数一样调用和传递参数。
函数指针经常和指针函数所混淆,
如:1) int *pf(); 2) int (*pf)();
1)指的是返回一个int型指针的函数,pf为一个函数名
2)指的是返回一个int型的函数,pf为函数指针。
区别主要在于()的优先级比* 高,所以int *pf() 实际上是 int * (pf());
通常函数指针可以这么申明:
returnType (*pf)(arg1,arg2,...);
pf 为一个指针,指向函数返回类型为 returnTpye,参数为arg1,arg2...的函数。
void (*pr) ();
void func()
{
...;
}
pf = func;
(*pf)();
这样 (*pf)() 就执行了func函数。
那如果我们要定义一个类型和pf一样的函数的指针的时候怎么办呢?
这里我们可以使用一下typedef 这个关键字
typedef void(*pf)();
pf pf_new;//这里我们就申明了一个函数指针,类型和pf一样。
那么现在如果我们知道一个函数的地址,假设值为0;这个函数类型和pf所指向的函数类型一样,那么我们如何调用这个函数呢?
我们知道如果申明一个变量通常是 returnType var;
如果我们要申明一个类型和var 一样的变量,那么我们要做的仅仅是把申明中的变量名和申明末尾的分号去掉便可,那么:
void(*)()0// 就将a转换为和pf一样的类型,接下来
(void(*)()0)();//调用地址在0的函数。
当然这里用typedef 会跟简单明了。
函数指针真的很有用啊。