typedef 声明函数指针的作用:
typedef void(*Fun)(void); ---------------》》 这种形式声明函数指针的类型,可以多次使用。如果得到函数的地址就可以直接用Fun强制类型转换成这种类型函数的指针。
void (*pFun)(void); ------------------》》 这种形式直接声明函数指针,是一个具体的指针。
看如下代码:
void function(){
cout<<"call function"<<endl;
}
typedef void(*Fun)(void);
Fun pFun = NULL:
pFun = function; --------------》》将函数function()地址赋值给pFun
function();-------------》》输出 call function
(*function)();-------------》》输出 call function
(**function)();-------------》》输出 call function
pFun(); ---------------------》》 输出 call function
(*pFun)(); ----------------------》》 输出 call function
(**pFun)(); ----------------------》》 输出 call function
........
---------------------》》可以看出pFun()和(*pFun)()和(**pFun)()是相同的。pFun的值是函数的地址,这个地址指向的又是这个函数本身的地址。在函数中,函数名就是这个函数的地址,这个地址值指向的地址还是这个函数的地址。如图所示:
因此,function的值是0X12456798,pFun的值是0X12456798,*pFun的值是0X12456798,**pFun的值是0X12456798········
调用函数的方法就是直接在指向函数地址的后面加上参数,这也是平常调用function()函数的本质。在这里就是调用pFun(),或者(*pFun)(),或者(**pFun)()······