這篇博文寫一下函式指標:
先來說一下函式,如果定義了乙個函式,在編譯時,編譯系統會為函式**分配一段儲存空間,,這段儲存空間的起始位址稱為這個函式的指標。
而指標變數顧名思義就是指向函式的指標,我們可以定義乙個指向函式的指標變數,用來存放某一函式的起始位址,這就意味著此指標變數指向該函式。
函式指標定義的方法為:型別名(*指標變數名)(函式引數列表);
例如:int (*pt)(char,int);
這個語句定義了乙個函式指標pt,它能指向返回值為整型,有乙個字元型引數和乙個整形引數的函式。
下面說一下使用方法:在給函式指標賦值時,只需給出函式名而不必給出引數。
定義乙個函式:int length(char ch,int n);
則將其賦給上面pt的語句為:pt=length;
呼叫的方法為:int result; result=(*pt)(ch,n);
即只需用(*pt)
代替函式名length
。
函式指標的作用:指向函式的指標變數的乙個重要用途是把函式的位址作為引數傳遞到其他函式。指向函式的指標可以作為函式引數,把函式的入口位址傳遞給形參,這樣就能在被呼叫的函式中使用實參函式。它的原理可以簡述如下:有乙個函式(假設函式名為fun),它有兩個形參(x1和x2),定義x1和x2為指向函式的指標變數。在呼叫函式fun時,實參為兩個函式名f1和f2,給形參傳遞的是f1和f2的額入口位址,這樣在fun中就可以呼叫f1和f2兩個函式。如果每次呼叫fun函式時,要呼叫的函式不是固定的,這時用指標變數就比較方便了。只要在每次呼叫fun函式時給出不同的函式名作為引數即可,不必修改fun函式。
下面以求定積分為例來說明這一好處,求定積分的演算法只有乙個就是利用數學中將待求區間進行無限等分的方法(當然在計算機程式設計中這一點無法實現),計算出每乙個近似小長方形的面積然後相加。然而函式卻有很多個,如果寫乙個通用函式integra
,則對於不同的函式就要在其中進行不同的函式宣告和相應修改。這樣顯然很不方便,而用了函式指標就會很簡單,不同函式只需要在傳實參時給出函式名就行。下面是**示例。
#include
#include
int main()
double integra(double (*p)(double),double a,double b,int n) //顯然,在這裡指標函式會比較好,簡便,只要乙個通用函式就可以了。
return s;
}double fsin(double x)
double fcos(double x)
double fexp(double x)
C語言 函式指標及其應用
基礎知識 函式指標 function pointer 就是指向函式的指標變數。定義函式指標的基本格式為 資料型別 指標變數名 形參列表 資料型別表示這個指標變數所指向的函式的返回值的型別,形參列表表示這個指標變數所指向的函式所具有的形參列表。例如,若有函式原型為 int fun int a,int ...
C語言基礎 通用指標
include include int main int argc,char args include int main int argc,char args main.c 7 3 error invalid use of void expression include int main int a...
c語言,指標,及其應用
既然指標變數的值是乙個位址,那麼這個位址不僅可以是變數的位址,也可以是其它資料結構的位址。在乙個指標變數中存放乙個陣列或乙個函式的首位址有何意義呢?因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首位址,也就找到了該陣列或函式。這樣一來,凡是出現陣列,函式的地方都可以用乙個指標變數來...