如何理解C++中指向“函数指针的数组”的指针

1、等价说法:

指向"指针的指针"的指针。指向”指针数组”的指针。有点绕。

2、预备知识:

 *h[3]和(*h)[3]分别指的是什么?

根据运算符的优先级。[]优先*。

所以,*h[3]中的h本质是一个数组,h是数组名,h数组有3个元素。*表明h中的这3个元素是指针。

(*h)[3]中的()使得*和h先结合,所以(*h)[3]中,h本质是一个指针名,指向一个有3个元素的数组。(至于数组元素是什么类型,现有的组合,不能确定,还需要前缀来完善)。

3、函数指针调用及返回值。

a) 函数指针

指向函数的指针。

a.1) 定义方式:

        返回类型为指针的函数指针原型(下同):

        const double * (*pa)(const double arr[],int n);   pa是一个函数指针。

a.2) 调用函数及获取函数返回指针指向的结果:

      调用:(*pa)(ar,n)。函数返回值是一个指针double类型的指针。其实允许pa(ar,n)。

       获取返回结果: *(*pa)(ar,n)。获取的是函数返回指针指向的结果。也允许*pa(ar,n)。

b) 函数指针的数组

函数指针的数组:是个数组,装的是指针。所以是*h[3]形式的。

b.1) 定义方式:

        const double * (*pb[3])(const double arr[],int n);   pb是一个函数指针的数组。

b.2) 调用函数及 获取函数返回指针指向的结果:

        调用:pb[i](ar,n)。pb是数组名,pb[i]是元素值(只是第i个函数的地址)*pb[i]才是具体的函数。

       获取返回结果: *pb[i](ar,n)。

b.3) 使用auto关键字,创建函数指针的数组      

        用auto关键字再创建一个就可以写为:auto pb2 = pb。

        pb2的调用同pb:pb2[i](ar,n)。

        获取返回结果:*pb2[i](ar,n)。

c) 指向”函数指针的数组“的指针:使用auto关键字创建

c.1) 定义方式:

        指向“指针数组”pb的指针:auto pb3 = &pb。

c.2) 调用函数及 获取函数返回指针指向的结果:

        pb3的调用:(*pb3)[i](ar,n)。(注意和下述“d)"的不一样。

        获取pb3的结果:*(*pb3)[i](ar,n)。

d) 自定义指向“函数指针的数组”的指针

指向“函数指针的数组”的指针:是个指针,指向一个数组,所以是(*h)[3]形式的,前向再加个*,*(*h)[3]表明数组装的是指针。

d.1) 定义方式:

        const double * (*(*pc)[3])(const double arr[],int n);   pc是一个指向“函数指针的数组”的指针。

d.2) 调用函数及 获取函数返回指针指向的结果:

       调用: (*(*pc)[i])(ar,n)。

       获取返回结果: *(*(*pc)[i])(ar,n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值