函数指针简介
函数指针指向的是函数而非对象,和其他指针一样,函数指针指向某种特定类型,函数的类型由它的返回类型和形参类型共同决定,与函数名无关。
bool LengthCompare(const string &,const string &)
该函数的类型是bool(const string& ,const string&)。想要声明一个指向改函数的指针,只需要用指针特换函数名即可:
bool (*pf)(const string&, const string&);//未初始化
赋值我们可以通过两种方法赋值:
pf=LengthCompare;
pf=&LengthCompare;
我们还可以直接使用指向函数的指针调用函数,无须提前解引用:
bool b1=pf(“hello”,“goodbye”);
bool b2=(*pf)(“hello”,“goodbye”);
bool b3=LengthCompare(“hello”,“goodbye”);
//三个等价调用
指向不同函数类型的指针之间不存在转换。
用函数指针架构的好处
- 简洁代码
- 提升代码的实时性(里面不加while(1)死等状态,而是当需要跳转的时候跳转)
- 方便做任务调度和多CPU的协调
函数指针架构的例子
typedef struct{
u32 para1;
}CPU1Var;
Ex void (*processcCPU1)(CPU1Var *);
Ex CPU1Var cpu1_var;
int main(){
CPU1_init();
do
{
processCPU1(&cpu1_var);
}while(1);
return 0;
}