1、返回指標的函式(指標函式)
指標函式,就是返回指標的函式,函式可以不返回任何值,也可以返回整型值,實型值,字元型值,當然也可以返回指標值。乙個指標函式的宣告:int *f(int i, int j); 由於( )的優先順序高於*,因此f先與()結合,所以f是乙個具有兩個int型引數,返回乙個指向int型指標的函式。
c語言的庫函式中有很多都是指標函式,比如字串處理函式,下面給出一些函式原型:
char *strcat( char *dest, const char *src );
char *strcpy( char *dest, const char *src );
char *strchr( const char *s, int c );
char *strstr( const char *src, const char*sub );
注意函式的返回值不僅僅侷限於指向變數的指標,也可以是指向函式的指標。初遇這種函式的宣告可能會痛苦一點兒,但練習兩三次應該是可以理解並掌握的。首先來看這個宣告:int (*function(int)) (double*,char);要了解此宣告的含義,首先來看function(int),將function宣告為乙個函式,它帶有乙個int型的形式引數,這個函式的返回值為乙個指標,正是我們本將開頭講過的函式指標int (*) (double*, char);這個指標指向乙個函式,此函式返回int型並帶有兩個分別是double*型和char型的形參。如果使用typedef可以將這個宣告簡化:
typedef int (*ptf) (double*, char);
ptf function(int );
要說明一下,對於typedef int (*ptf) (double*,char); 注意不要用#define的思維來看待typedef,如果用#define的思維來看的話會以為(*ptf)(double*, char)是int的別名,但這樣的別名看起來好像又不是合法的名字,於是會處於迷茫狀態。實際上,上面的語句把ptf定義為一種函式指標型別的別名,它和函式指標型別int (*) (double*, char);等價,也就是說ptf現在也是一種型別。
2、函式指標
void test(int x); //此處的申明也可寫成:void test( int );
void (*f)(int ); //宣告f 變數
c語言規定函式名會被轉換為指向這個函式的指標,除非這個函式名作為& 操作符或sizeof操作符的運算元(注意:函式名用於sizeof的運算元是非法的)。也就是說f = test;中test被自動轉換為&test,而f= &test;中已經顯示使用了&test,所以test就不會再發生轉換了。因此直接引用函式名等效於在函式名上應用 & 運算子,兩種方法都會得到指向該函式的指標。
f=test;
f=&test;
1. 其實,test的函式名與f函式指標都是一樣的,即都是函式指標。test函式名是乙個函式指標常量,而f是乙個函式數指標變數,這是它們的關係。
2. 但函式名呼叫如果都得如(*test)(10);這樣,那書寫與讀起來都是不方便和不習慣的。所以c語言的設計者們才會設計成又可允許test(10);這種形式地呼叫
函式指標作為某個函式的引數
要求:我要設計乙個callmyfun函式,這個函式可以通過引數中的函式指標值不同來分別呼叫myfun1、myfun2、myfun3這三個函式(注:這三個函式的定義格式應相同)。
實現:**如下:
//自行包含標頭檔案
void myfun1(int x);
void myfun2(int x);
void myfun3(int x);
typedef void (*funtype)(int ); //②. 定義乙個函式指標型別funtype,與①函式型別一至
void callmyfun(funtype fp,int x);
int main(int argc, char* argv)
void callmyfun(funtype fp,int x) //③. 引數fp的型別是funtype。
void myfun1(int x) // ①. 這是個有乙個引數的函式,以下兩個函式也相同
void myfun2(int x)
void myfun3(int x)
函式指標與指標函式
指標函式 指標函式是指函式的返回值型別是乙個指標型別,即本質是乙個函式。我們知道函式都有返回型別 如果不返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函式的用途十分廣泛。事實上,...
函式指標與指標函式
函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...
函式指標與指標函式
函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...