解释下面声明的类型是什么?
(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的这样的定义