指向函式的指標變數

2021-06-06 23:10:44 字數 1238 閱讀 9673

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...