天天看点

函数指针和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的这样的定义

继续阅读