天天看點

函數指針和typedef函數指針用法

解釋下面聲明的類型是什麼?

(a) int (*mpf)(vector<int>&) ;

(b) double (*apf[20])(double) ;

(c) int (*(*papf)[2])(int) ;

(a)

 int (*mpf)(vector<int>&) ;

一步一步分析:

     *mpf

mpf是一個指針

     (*mpf)()

mpf是一個指針,指向一個函數

     (*mpf)(vector<int>&)

mpf是一個指針,指向一個函數,該函數擁有一個reference參數,參數類型為vector<int>

     int (*mpf)(vector<int>&)

mpf是一個指針,指向一個函數,該函數擁有一個reference參數,參數類型為vector<int>,并傳回一個int

(b)

 double (*apf[20])(double) ;

一步一步分析:

     apf[20]

apf是一個數組,擁有20個元素

    *apf[20]

apf是一個數組,擁有20個元素,每個元素的類型是指針

    (*apf[20])()

apf是一個數組,擁有20個元素,每個元素的類型是函數指針

    (*apf[20])(double)

apf是一個數組,擁有20個元素,每個元素的類型是函數指針,該函數擁有一個參數,參數類型是double

    double (*apf[20])(double)

apf是一個數組,擁有20個元素,每個元素的類型是函數指針,該函數擁有一個參數,參數類型是double,并傳回一個double

(c)

 int (*(*papf)[2])(int) ;

一步一步分析:

     *papf

papf是一個指針

     (*papf)[2]

papf是一個指針,指向一個數組,該數組擁有兩個元素

    *(*papf)[2]

papf是一個指針,指向一個數組,該數組擁有兩個元素,每個元素的類型是指針

    (*(*papf)[2])()

papf是一個指針,指向一個數組,該數組擁有兩個元素,每個元素的類型是函數指針

   (*(*papf)[2])(int)

papf是一個指針,指向一個數組,該數組擁有兩個元素,每個元素的類型是函數指針,其函數形式擁有一個參數,參數類型是int

    int (*(*papf)[2])(int)

papf是一個指針,指向一個數組,該數組擁有兩個元素,每個元素的類型是函數指針,其函數形式擁有一個參數,參數類型是int,并傳回一個int

以下(b)、(c)中的函數指針以typedef定義新的名稱,以便閱讀

(b) double (*apf[20])(double) ;

     typedef double (*PF1)(double) ;

     PF1 apf[20] ;

(c) int (*(*papf)[2])(int) ;

     typedef int (*PF2)(int) ;

     PF2 (*papf)[2] ;//将(*papf)[2]看出一個整體,是以才有上面的typedef的這樣的定義

繼續閱讀