1 定義和呼叫
程式在編譯後,每個函式都有乙個首位址(也就是函式第一條指令的位址),這個位址稱為函式的指標。可以定義指向函式的指標變數,使用指標變數間接呼叫函式。下面通過乙個簡單的例子來說明:
float max(float x,float y)
float min(float x,float y)
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)
{float f,t, fmin, fstep=0.01; /* fstep為步長值*/
/*在fpos1至fpos2的區間內,以fstep為步長,依次比較最小f值*/
fmin=(*p)(fpos1);
for(f=fpos1;f<=fpos2;f+=fstep)
{t=(*p)(f);
if(t
指向變數的常指標和指向常變數的指標
剛接觸到指標時,關於指向變數的常指標和指向常變數的指標容易混淆,所以整理下,希望能夠幫助自己也幫助到大家。常指標就是我們說的指向常量的指標,顧名思義,它是用來指向常量的。實際上,c 規定只能用指向常變數的指標指向常變數,普通指標指向它就會報錯,原因也很容易理解,我們用普通指標指向常變數之後,有可能就...
指向變數的常指標與指向常變數的指標變數的區別
一 指向變數的常指標 形式 型別名 const 指標變數名 將指標變數宣告為const型,這樣指標變數始終保持為初值,不能改變,即其指向不能改變 例 include include int main 常指標pcpt已經指向了cbuff1,就不能再指向cbuff2了。注意 雖然常指標只能始終指向同乙個...
指標變數作為函式引數為了改變指標變數指向實參的值
思考 為什麼兩個執行結果不同 c語言使用值傳遞時,僅僅將實參的值傳遞給形參。對於第一種寫法 main函式傳遞給swap函式的是 a和 b的值,即a和b所在的位址的值 那麼swap函式裡面通過 x來更改的就是 a所在的位址裡面的值,也就是a本身的值了,所以第一種寫法main函式呼叫swap函式之後,a...