函數(shù)指針 就是指向函數(shù)的指針
創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)全網(wǎng)整合營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、和平網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為和平等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
比如
void?pr_int(int?a)//函數(shù)
{
printf("%d\n",a);
}
void?func(void?(*p)(int),?int?m)//函數(shù)指針做參數(shù)
{
p(m);//調(diào)用函數(shù)指針
}
int?main()
{
func(pr_int,?100);
return?0;
}
int
(*p)(參數(shù)表列)這個(gè)是定義一個(gè)指向函數(shù)的指針,返回值為整型。比如int
max(int
a,int
b)將max換成(*p)
即可,p里放的是max函數(shù)的入口地址,所以,此時(shí)的p做自加自減等運(yùn)算無(wú)意義。不能用*(p+1)表示函數(shù)的下一條指令。
int
*p()是函數(shù),此函數(shù)的返回值是個(gè)指向整型變量的指針變量。
***************************************************
以上是你需要的,下面是一些其它相關(guān)容易混淆的:
int
*p[n]:定義指針數(shù)組P,它由n個(gè)指向整型數(shù)據(jù)的指針元素組成。
int
(*p)[n]:P為指向含n個(gè)元素的一維數(shù)組的指針變量。
函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應(yīng)是指針變量,只不過(guò)該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。
函數(shù)指針有兩個(gè)用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。
函數(shù)指針的聲明方法為:
返回值類(lèi)型 ( *?指針變量名) ([形參列表]);
如:
int func(int x); /* 聲明一個(gè)函數(shù) */
int (*f) (int x); /* 聲明一個(gè)函數(shù)指針 */
f=func; /* 將func函數(shù)的首地址賦給指針f */
或者使用下面的方法將函數(shù)地址賦給函數(shù)指針:
f = func;
賦值時(shí)函數(shù)func不帶括號(hào),也不帶參數(shù),由于func代表函數(shù)的首地址,因此經(jīng)過(guò)賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。
下面的程序說(shuō)明了函數(shù)指針調(diào)用函數(shù)的方法:
#includestdio.h
int?max(int?x,int?y){return?(xy??x:y);}
int?main()
{
int?(*ptr)(int,?int);
int?a,?b,?c;
ptr?=?max;
scanf("%d%d",?a,?b);
c?=?(*ptr)(a,b);
printf("a=%d,?b=%d,?max=%d",?a,?b,?c);
return?0;
}