前言
很多小伙伴看到本文标题可能都懵了,纷纷表示:你搁这搁这呢?
学习本文之前,我们需要回顾一下前面的两块内容:
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语言快速入门》专栏的前两篇一起学习,可以对读者的指针进阶起到事半功倍的效果,最后预祝读者姥爷学习愉快