1 定義和呼叫
float max(float x,float y)
float min(float x,float y)
main()
程式執行的結果為:
max=2.000000
min=1.000000
說明:(1)[color=red]語句float (*p)(float x, float y);定義了乙個指向函式的指標變數。函式的格式是:返回值為float型,形式引數列表是(float x, float y)。p定義後,可以指向任何滿足該格式的函式[/color]。
(2)定義指向函式的指標變數的格式為:
(3)[color=red]資料型別(*指標變數名稱)(形式引數列表)[/color];
(4)其中資料型別是函式返回值的型別,形式引數列表是函式的形式引數列表。
(5)形式引數列表中,引數名稱可以省略。比如,float (*p)(float x, float y);可以寫為:
(6)float (*p)(float, float);
(7[color=red])注意指標變數名稱兩邊的括號不能省略[/color]。
(8)語句p=max;將max函式的首位址值賦給指標變數p,也就是使p指向函式max。c語言中,函式名稱代表函式的首位址。
(10)語句p=min; 將min函式的首位址值賦給指標變數p。p是乙個變數,p的值實際上是乙個記憶體位址值,可以指向max,也可以指向min,但指向函式的格式必須與p的定義相符合。
(12)將函式首位址賦給指標變數時,直接寫函式名稱即可,不用寫括號和函式引數。
(13)利用指標變數呼叫函式時,要寫明函式的實際引數。
float (*p1)(int x, long y);
float *p2(int x, long y);
[color=red]第乙個語句定義了乙個指向函式的指標變數p1;第二個語句宣告了乙個函式p2,p2的形式引數為(int x, long y),返回值為乙個float型的指標[/color]。
2 指向函式的指標作為函式引數
有時候,許多函式功能不同,但它們的返回值和形式引數列表都相同。這種情況下,可以構造乙個通用的函式,把函式的指標作為函式引數,這樣有利於進行程式的模組化設計。比如下面的例子中,我們把對2個float型數進行加、減、乘、除操作的4個函式歸納成乙個數學操作函式mathfunc。這樣,在呼叫mathfunc函式時,只要將具體函式名稱作為函式實際引數,mathfunc就會自動呼叫相應的加、減、乘、除函式,並計算出結果。下面是程式的**:
float plus(float f1, float f2);
float minus(float f1, float f2);
float multiply(float f1, float f2);
float divide(float f1, float f2);
float mathfunc(float (*p)(float, float), float para1,float para2);
main()
float plus(float f1, float f2)
float minus(float f1, float f2)
float multiply(float f1, float f2)
float divide(float f1, float f2)
float mathfunc(float (*p)(float, float), float para1,float para2)
程式執行的結果為:
a+b=4.000000
a-b=-1.000000
a*b=3.750000
a/b=0.600000
例 8-10 利用指向函式的指標,求如下函式在乙個區段內的最小值。
本題可以利用指向函式的指標。雖然所給的函式互不相同,但其在一定區間內求最小值的演算法都是通用的。因此,可以寫乙個通用的函式float getmin(float (*p)(float), float fpos1,float fpos2),用於計算不同函式的最小值。該函式的第乙個引數p是乙個指向函式的指標,p指向包含乙個float型引數的函式。
對應於題目的要求,分別寫三個數學函式。
在主函式中,呼叫getmin時,第乙個引數分別使用上述數學函式的名稱,後兩個引數傳入區間值。這樣,呼叫三次getmin即可以求出三個函式在給定區間的最小值。
#include "math.h"
float f1(float x)
float f2(float x)
float f3(float x)
/*p為指向函式的指標,fpos1和fpos2為左右區間的值*/
float getmin(float (*p)(float), float fpos1,float fpos2)
/*返回求出的最小值*/
return fmin;
}main()
程式執行的結果為:
min value of f1: 0.000000
min value of f2: 0.282244
min value of f3: -1.000000
主函式main呼叫getmin函式時,傳入了函式名稱和區間值。getmin函式在計算函式最小值時,根據傳入的函式指標p呼叫相應的函式。
靈活使用指向函式的指標可以提高程式的擴充性。比如本題,如果要增加條件,計算乙個f4(x)=2*logx+1在(0,5)內的最小值,那麼我們只需要增加乙個f4函式的定義,然後在main函式中就可以直接進行計算getmin(f4,0,5),getmin函式不用進行任何修改。
指向函式的指標 函式指標
如果在程式中定義了乙個函式,在編譯時,編譯系統為函式 分配一段儲存空間,這段儲存空間的起始 又稱入口 位址 稱為這個函式的指標。指標即是位址 我們定義乙個指標變數,這個指標變數指向乙個整型資料變數的位址,我們稱指向乙個整型資料的指標變數 那麼它指向乙個函式的位址,稱為指向乙個函式的指標變數。形如 i...
函式指標 指向函式的指標
乙個函式總是占用一段連續的記憶體區域,函式名在表示式中有時也會被轉換為該函式所在記憶體區域的首位址,這和陣列名非常類似。我們可以把函式的這個首位址 或稱入口位址 賦予乙個指標變數,使指標變數指向函式所在的記憶體區域,然後通過指標變數就可以找到並呼叫該函式。這種指標就是函式指標。函式指標的定義形式為 ...
指向函式的指標,指向函式的指標作為函式引數
1.基本法 include pragma warning disable 4996 pragma warning disable 4715 指向函式的指標作為函式的引數 有兩個整數a,b,讓使用者輸入1,2或者3,當輸入1時,給出相對大值,當輸入2時,給出相對小值,當輸入3時,給出兩者之和 1.可以...