typedef定義函式,回撥函式
阿新 • • 發佈:2019-02-12
一、typedef定義函式
除了函式指標,普通函式也可以用typedef,如:
typedef int F (void);//定義函式型別F
之後可以這樣宣告:
F f,g;
相當於宣告
int f(void);
int g(void);
下面這個函式宣告是錯誤的:
F h(void);
因為函式可以返回void
型別、標量型別、結構體、聯合體,但不能返回函式型別,也不能返回陣列型別。
而下面這個函式宣告是正確的:
F *e(void);
函式e
返回一個F *
型別的函式指標。
如果給e
多套幾層括號仍然表示同樣的意思:
F *((e))(void);
但如果把*
號也套在括號裡就不一樣了:
int (*fp)(void);
這樣聲明瞭一個函式指標,而不是宣告一個函式。fp
也可以這樣宣告:
F *fp;
二、回撥函式
回撥函式
如果引數是一個函式指標,呼叫者可以傳遞一個函式的地址給實現者,讓實現者去呼叫它,這稱為回撥函式(Callback Function)。例如qsort(3)
和bsearch(3)
。
回撥函式示例:void func(void (*f)(void *), void *p);
呼叫者
呼叫者 | 實現者 |
---|---|
|
|