用指向函數的指針作函數的參數,可以實現函數入口地址的傳遞,即把函數名傳遞給函數的形參,從而可以間接訪問該函數。下麵通過一個實例來說明函數指針作為參數的用法。
[例1018]用函數指針把兩個整數的各種運算函數傳遞給同一個函數。
intoper(intx,inty,int(*pf)(int,int))
{
return(*pf)(x,y);
}
intadd(inta,intb)/*加法運算函數*/
{returna+b;}
intsub(inta,intb)/*減法運算函數*/
{returna-b;}
intmul(inta,intb)/*乘法運算函數*/
{returna*b;}
intdiv(inta,intb)/*除法運算函數*/
{if(!b)
return0;
else
returna/b;
}
intmod(inta,intb)/*求餘運算函數*/
{if(!b)
return0;
else
returna%b;}
voidmain()
{
inta=3,b=4,i,result[5];
chars[]="+-*/%";
result[0]=oper(a,b,add);
result[1]=oper(a,b,sub);
result[2]=oper(a,b,mul);
result[3]=oper(a,b,div);
result[4]=oper(a,b,mod);
for(i=0;i
printf("(%d)%d%c%d=%d\n",i+1,a,s[i],b,result[i]);
}
運行情況如下:
(1)3+4=7
(2)3-4=-1
(3)3*4=12
(4)3/4=0
(5)3%4=3
程序說明:oper函數以指向函數的指針變量作為形參。在調用oper函數時,將函數的指針(函數名)作為實參傳給形參pf,通過虛實結合後,指向函數的指針變量pf就指向了相應的函數。
一個函數可以返回一個整型值、字符型值、實型值等,當然也可以返回指針型的數據。我們把返回值是指針的函數稱為指針型函數。
指針型函數一般定義形式為:
類型名*函數名(參數列表)
例如:int*fun(inta,intb)
{
……/*函數體*/
}