猴赛雷啊!指向函数指针数组的指针?读完本文必拿下!!!


前言

很多小伙伴看到本文标题可能都懵了,纷纷表示:你搁这搁这呢?
在这里插入图片描述

学习本文之前,我们需要回顾一下前面的两块内容:
1.函数指针
2.函数指针数组
接下来也就是函数指针数组指针,不用着急,跟着笔者来一探究竟吧。


提示:以下是本篇文章正文内容,下面案例可供参考

一、引子

示例代码:

显而易见地,下面的代码中,arr是一个整形数组,而p是一个指向整形数组的指针

int arr[10];
int(*p)[10]=&arr;

这里的代码和上面的代码有什么区别?区别就在于,下面代码中的arr是一个整形指针数组,数组里存放的是整形指针,p是指向这个整形指针数组的指针。

int *arr[10];
int*(*p)[10]=&arr;

p指向什么类型的数组取决于什么?
答案是数组内元素的类型,就比如第一段代码中,数组arr里放的是整形-p对应的就是指向整形数组的指针;第二段代码中,数组arr放的是整形指针-p对应的就是指向整形指针数组的指针。

那么就很好理解了,所谓的函数指针数组的指针,也不过是把某个数组里全部放函数指针,然后我们找一个指针去指向这个数组罢了。

二、使用步骤

1.创建函数指针数组指针

代码如下(以函数Add示例):

int Add(int x,int y)
{
return x+y;
}

p是函数Add的指针
parr是函数指针数组,数组内每个元素都是函数指针,该数组有5个元素
pparr是函数指针数组指针,指向某个函数指针数组。

int (*p)(int,int)=Add;
int (*parr[5])(int,int);
int (*(*pparr)[5])(int,int)=&parr;

pparr类型创建方法解释如下

第一步,pparr是一个函数指针数组指针,以一个简单的说法:好男孩,本质是男孩,性质是好。函数指针数组指针,我们要确定的是:不管它前面有多少形容词,它本身是一个指针。指针创建时,就得有标志性的*,所以第一步即让parr先与 * 结合,称为一个指针——效果为*parr

第二步,函数指针数组指针,它是一个指针,指向一个数组,和数组指针创建方法一样,我们把它变成(*parr)[5] 最后只需要知道它数组内放的元素是什么类型就行了
ps:这里5表示被指向数组里有5个元素,你也可以改成其他数字

最后一步,数组内元素是函数指针啊,所以剩下的也就是函数指针类型int(*)(int,int),到这里完成函数指针数组指针的创建也就是——int ( * (*pparr)[5] )(int,int)=&parr
ps:这里的函数指针类型是以Add函数为例,不同的函数参数类型和返回类型不同(具体见C语言快速入门专栏的函数指针)

2.知识回顾及一些引申

前两节C语言快速入门专栏里,我们介绍了函数指针函数指针数组。今天我们介绍了函数指针数组指针,如果读者有兴趣还可以挖掘函数指针数组指针数组(也就是用来存放函数指针数组指针的数组),还有等等,但也过于复杂了,我们学的是原理,是方法,比如函数指针的原理,创建它的方法,再由函数指针到函数指针数组,我们如何创建它,懂原理和方法往往是最重要的!


总结

提示:本文介绍了函数指针数组指针的创建原理,希望读者能将知识串联成一个网络,本文建议与笔者《C语言快速入门》专栏的前两篇一起学习,可以对读者的指针进阶起到事半功倍的效果,最后预祝读者姥爷学习愉快

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劲夫学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值