【C语言】指针数组 _ 数组指针 _ 函数指针 _ 函数指针数组 _ 指向函数指针数组的指针
指针数组 | 数组指针 | 函数指针 | 函数指针数组 | 指向函数指针数组的指针
怎么样?这个标题是否让你还没浏览文章就眼花缭乱了?(笑)别畏惧,看这些词组中有一个共同的特点,就是都有一个词:指针。顾名思义,这些知识当然和指针联系紧密,那就让我们来见识见识这种指针的威力…
指针数组
指针数组是个啥?是个指针?还是个数组?
其实,我有个小小的分析这种问题的方法,分享给大家:
在语文中,我们学过一般情况下修饰词在被修饰词前面(我语文学的不好,大家理解了就好(笑))
那么 指针数组 也就是指针在修饰数组,这里的数组是被修饰词,而指针是修饰词。
不难理解,指针数组其实是一个数组:这个数组中存放了若干个指针。
它的写法如下:
数组指针
我相信经过我上面一番分析,小伙伴们应该对分析这个知识点有了一定的思路。
没错,这个数组指针实际上就是一个指针:它是一个指向一个存放若干个元素的数组的指针。
简称数组指针,它的写法如下:
不过掌握了这个分析方法显然是不够的,因为在实际的应用过程中代码可不是中文的,而是像上图一样的形式。
那要如何分析它到底是数组还是指针呢?
这里我还有一个分析问题的方法,在这里分享给大家:
通过操作符优先级来进行逐个分析
这句话是我从这个方法中提炼出来的,我也不买关子,下面我带大家来使用这个方法分析上面这个知识点:
int (*p)[]
因为小括号优先级的原因 ,我们从内而外分析这个代码,p 先与‘ * ’号结合,说明 p 是一个指针变量,随后指针 p 再与中括号结合,说明 p 指向的是一个数组,最后 int 修饰前面的代码,说明 p 指向的数组里存放的是整形元素。
这个方法可以很轻而易举的将这种不易理解的知识点分析的很透彻,最后我们在对刚才的分析进行总结:
这个语句是在定义一个指向一个存放若干个整形元素的数组的指针。
函数指针
有了这两个分析问题的方法,我们来看看这个知识点,很显然,函数是在修饰指针。那么函数指针实际上是个指针:它是指向一个函数的指针
它的写法如下:
我们再来分析一下它是如何构造的:
因为小括号优先级的缘故,我们依然是从内部开始分析,pAdd与 ‘ * ’ 结合,说明 pAdd 是一个指针,随后再与外层结合,说明这个一个函数,函数的返回值是 int 型,函数的两个参数都是 int 型的
最后我们再来总结一下:
这个语句是在定义一个指向函数的指针,这个函数的返回值是 int 型,这个函数的两个参数都是 int 型
怎么样?这种分析方法是不是手到擒来?那么我们再来看下面的知识点,大家要挺住!
函数指针数组
函数指针数组???这是个什么?
我们首先用刚才的分析方法确定它到底是函数还是指针还是数组?
这里的函数一词和指针一词都在修饰数组,那么我们可以确定这是个数组了。这是一个存放函数指针的数组
它的写法如下:
我们来分析一下它的构造:
因为小括号优先级的原因 ,我们从内部开始分析,因为中括号优先级高于‘ * ’, p 首先与中括号结合成为数组,随后再与 ‘ * ’ 结合,说明 p 数组中存放的是指针元素,再与外层结合,说明这个数组中指针元素指向的是函数。而函数的返回值是 int 型的,函数的两个参数是 int 型的
最后,进行总结:
这个语句定义了一个存放若干个指向函数的指针的数组,这个指针指向的函数的返回值是 int 型的,两个参数是 int 型的
指向函数指针数组的指针
能看到这里的小伙伴也是不容易,如果前面的东西没有把你搞得晕头转向的话,请允许我为你点个赞,能理解是真的不容易。不过也别高兴,还有最后一个非常绕的知识点,然我们来见识见识吧!
看到前面这么多修饰词汇是不是有点害怕,没错,运用前面的分析方法我们不难知道,这是一个指针,它是一个指向函数指针数组的指针:用一个指针指向了函数指针数组!
它的写法如下:
最后我再带大家分析一下这个语句的构造:
因为小括号的缘故,我们从内向外分析, pp 与 ‘ * ’ 结合,说明 pp 是个指针,随后外层中,因为中括号优先级高于‘ * ’,指针 pp 与 中括号结合,说明指针 pp 指向一个数组, ‘ * ’修饰说明,这个数组中存放的是指针元素,退到最外层,与外层函数指针类型(int (*)(int , int))结合,说明这个数组中存放的是指针函数,里面的指针指向的函数,返回值是 int 型,两个参数都是 int 型
学到这里,我们肯定对指针有个不一样的认识了吧?
加油,共勉