解釋下面聲明的類型是什麼?
(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的這樣的定義