函數(shù)也可以作為參數(shù)傳遞給其他的函數(shù),傳遞的是函數(shù)的地址,函數(shù)的地址就是函數(shù)名.
申明函數(shù)指針
和申明指向某種數(shù)據(jù)類型的指針一樣,申明函數(shù)指針時(shí),也必須指定指針指向的函數(shù)類型,這就意味著申明應(yīng)指定函數(shù)的返回類型和函數(shù)的形參列表.如有如下函數(shù):
double* fun(int a, int b);
則申明指向上述函數(shù)的函數(shù)指針應(yīng)如下:
double* (*pfun)(int a,int b);
仔細(xì)比較可知,兩個(gè)申明的方式一樣,只是fun
和(*pfun)
的區(qū)別,因?yàn)?code>fun是函數(shù),則(*pfun)
也是函數(shù),若(*pfun)
是函數(shù),那么pfun
就是函數(shù)指針了.
使用函數(shù)指針
因?yàn)?code>(*pfun)就表示的是函數(shù),所以就可以直接當(dāng)做函數(shù)名來用,所以下列用法是一樣的:
double* ans1 = fun(a,b);
pfun = fun; // pfun指向fun函數(shù)
double* ans2 = (*pfun)(a,b); // 使用函數(shù)指針調(diào)用fun函數(shù)
事實(shí)上,C++也運(yùn)行直接像使用函數(shù)那樣使用函數(shù)指針,所以,下面的用法也是可以的:
double* ans2 = pfun(a,b);
使用typedef簡(jiǎn)化
typedef的作用就是創(chuàng)建一個(gè)類型的別名.typedef也可以簡(jiǎn)化相應(yīng)的函數(shù)指針;如:
typedef double* (*pfun)(int a, int b);
pfun fun1 = f1;
pfun fun2 = f2;
```