1.定義函式的指標型別:
就像自定義資料型別一樣,我們也可以先定義乙個函式指標型別,然後再用這個型別來申明函式指標變數。
乙個自定義資料型別的例子。
typedef int* pint; //為int* 型別定義了乙個pint的別名
intmain()
看一下函式指標型別的定義及使用:
void myfun(int x); //此處的申明也可寫成:void myfun( int );
typedef void (*funtype)(int ); //
這樣只是定義乙個函式指標型別
funtype funp; //
然後用funtype型別來申明全域性funp變數
int main(int argc, char*ar**)
void myfun(int
x)
首先,在void (*funtype)(int ); 前加了乙個typedef 。這樣只是定義乙個名為funtype函式指標型別,而不是乙個funtype變數。
然後,funtype funp; 這句就如pint px;一樣地申明乙個funp變數。
其它相同。整個程式完成了相同的事。
這樣做法的好處是:
有了funtype型別後,我們就可以同樣地、很方便地用funtype型別來申明多個同型別的函式指標變數了。如下:
funtype funp2;
funtype funp3;
//……
2.函式指標作為某個函式的引數
既然函式指標變數是乙個變數,當然也可以作為某個函式的引數來使用的。
例項:我要設計乙個callmyfun函式,這個函式可以通過引數中的函式指標值不同來分別呼叫myfun1、myfun2、myfun3這三個函式(注:這三個函式的定義格式應相同)。
void myfun1(intx);
void myfun2(int
x);
void myfun3(int
x);
typedef
void (*funtype)(int ); //
②. 定義乙個函式指標型別funtype,與①函式型別一至
void callmyfun(funtype fp,int
x);int main(int argc, char*ar**)
void callmyfun(funtype fp,int x) //
③. 引數fp的型別是funtype。
void myfun1(int x) //
①. 這是個有乙個引數的函式,以下兩個函式也相同
void myfun2(int
x) void myfun3(int
x)
指標函式與函式指標理解
1 指標作為函式引數 跟傳址函式一樣的用法,形參的改變對應的實參有效。2 指標函式 指標最為函式的返回值。語法格式 資料型別 函式名 參數列 1 資料型別是函式返回的指標所指向資料的型別 2 函式名宣告了乙個指標型的函式 3 參數列是函式的形參列表 例如 int fun int a,int b 3 ...
理解指標 (二)
指標 理解指標 一 再次理解指標 理解更深刻 盡可能等定義了物件之後,再定義指向它的指標,確保指標初始化 先定義乙個變數p char c char型變數c 再定義乙個指標p char p char型指標p 初始化指標 p指向c p c 取變數c的位址賦值給指標p 賦值 c a 直接給變數c賦值字元a...
對比理解指標函式和函式指標
1 函式指標,可以這樣理解,它首先是乙個指標變數 一般佔4個位元組 只是它將要指向的資料型別為某種形式的函式。舉例如清單1 include int int func int a,int b char char func char a,char b int main void 例子輸出結果 int f...