樓主已經(jīng)開(kāi)始想要知道如何用函數(shù)指針了,不錯(cuò),好學(xué)生,給你個(gè)例子
創(chuàng)新互聯(lián)建站專(zhuān)注于布爾津網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供布爾津營(yíng)銷(xiāo)型網(wǎng)站建設(shè),布爾津網(wǎng)站制作、布爾津網(wǎng)頁(yè)設(shè)計(jì)、布爾津網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造布爾津網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供布爾津網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
#include stdio.h
int ff(int(*p)(int,int),int a,int b)//原始寫(xiě)法,閱讀不便
{
return p(a,b);
}
typedef int(*Pfun)(int,int);//定義函數(shù)指針類(lèi)型,同時(shí)申明了原型 返回int 兩個(gè)int形參
int f(Pfun p,int a,int b) //改進(jìn)寫(xiě)法 易懂
{
return p(a,b);
}
int add(int a,int b)
{
printf("加法函數(shù)add被調(diào)用:");
return a+b;
}
int sub(int a,int b)
{
printf("減法函數(shù)sub被調(diào)用:");
return a-b;
}
void main()
{//函數(shù)指針初步應(yīng)用
int a=1,b=2;
printf(" %d+%d=%d\n",a,b,f(add,a,b));
printf(" %d-%d=%d\n",a,b,f(sub,a,b));
printf(" %d+%d=%d\n",a,b,ff(add,a,b));
printf(" %d-%d=%d\n",a,b,ff(sub,a,b));
}
///////////運(yùn)行結(jié)果:
加法函數(shù)add被調(diào)用: 1+2=3
減法函數(shù)sub被調(diào)用: 1-2=-1
加法函數(shù)add被調(diào)用: 1+2=3
減法函數(shù)sub被調(diào)用: 1-2=-1
#include?stdio.h
//---子函數(shù)聲明---//?
int?func1();
int?func2(int?(*func1)());????????//形參為函數(shù)指針(即指向函數(shù)的指針)?
//---主函數(shù)---//?
int?main(){
printf("向函數(shù)二傳遞函數(shù)一,\n即函數(shù)一作為函數(shù)二的參數(shù)。\n");
printf("%d?",func1());
printf("%d\n",func2(func1));//注意函數(shù)名即為函數(shù)地址?。。。。?!?
}????????????????????????????????//實(shí)參為函數(shù)名func1或者func1,兩者等價(jià),而非func1()?
//---子函數(shù)定義---//?
int?func1(){
return?1;
}
int?func2(int?(*func1)()){????????//形參為函數(shù)指針(即指向函數(shù)的指針)
return?func1()+1;
}
Question:在函數(shù)void function()中,需要將另外一個(gè)函數(shù)double input()的函數(shù)名作為參數(shù)。
typedef double (*P)(int);
Note:參數(shù)部分需要注意,函數(shù)input()所有的輸入?yún)?shù)類(lèi)型都需要包含在內(nèi)。
例如 double input(double u[5], int num, double x), 則在定義時(shí)寫(xiě)作 typedef double (*P)(double*,int,double)。
此時(shí),函數(shù)作為一種類(lèi)型,可以直接被其他函數(shù)調(diào)用。
函數(shù)聲明中定義 void function(P input),調(diào)用function(input)即可。
也可以寫(xiě)成