正文 第36章 指針9(1 / 2)

用指向函數的指針作函數的參數,可以實現函數入口地址的傳遞,即把函數名傳遞給函數的形參,從而可以間接訪問該函數。下麵通過一個實例來說明函數指針作為參數的用法。

[例1018]用函數指針把兩個整數的各種運算函數傳遞給同一個函數。

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)

……/*函數體*/