函数指针和typedef函数指针用法

本文详细解析了C++中复杂指针及函数指针的定义方式,通过逐步拆解不同类型声明,帮助读者理解如何定义指向特定函数的指针。

解释下面声明的类型是什么?

(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的这样的定义
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值