1. 程式人生 > >typedef定義函式,回撥函式

typedef定義函式,回撥函式

一、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);

呼叫者

呼叫者實現者
  1. 提供一個回撥函式,再提供一個準備傳給回撥函式的引數。

  2. 把回撥函式傳給引數f,把準備傳給回撥函式的引數按void *型別傳給引數p

  1. 在適當的時候根據呼叫者傳來的函式指標f呼叫回撥函式,將呼叫者傳來的引數p轉交給回撥函式,即呼叫f(p);