指针数组?数组指针??……

33 篇文章 0 订阅
17 篇文章 0 订阅

指针数组

什么是指针数组呢?到底是指针还是数组呢??

首先我们要明确一点,指针数组是数组而不是指针这种数组与我们之前见的数组没什么两样,之所以叫他指针数组只是因为这个数组里的元素是指针。

下面我们来举例辨析:

1:int *arr1[100]

2:char *arr2[100]

3:char **arr[100]

首先我们都能一眼知道int和char是整型和字符型,其次,我们要想知道到哪一个是指针数组,就要看先与谁结合。我们又知道 [ ] 的优先级是高于 * 的,所以说在这里的三个例子都是先与 [ ] 结合,既然先与 [ ] 结合,那就先确定为数组,所以前两个例子我们可以很顺利的辨认出一个是整型指针数组一个是字符型指针数组,而第三个我们注意到有两个 *,当其与 [ ] 结合再与离他近的 * 结合以后就是一个指针数组,但此时他还要跟剩下的一个 * 结合,这样一来就变成了一个指针,那么是一个什么样的指针呢? 这是一个指向指针数组的指针。

数组指针

知道了指针数组我们接着来看一下数组指针。我们首先明确一下数组指针是指针。

在之前我们见过 :

1:int *p;(整型指针,是能够指向整形数据的指针)

2:char *pp;(字符型指针,是能够指向字符型数据的指针)

那么现在同理可得:数组指针,是能够指向数组的指针

1:int *p[100];

2:int (*p)[100];

这两句中的p分别代表什么呢?先观察p是先与谁结合的,第一句p先与 [ ] 结合再与 * 结合,因此这是一个整型指针数组,第二个p因为有()将 * 括起来,因此p就先与 * 结合说明p是一个指针变量,再与 [ ] 结合说明这个指针指向了一个有100个整型数据的数组,所以p是一个指向数组的指针,叫数组指针。

函数指针

大家都知道指针就是地址,那么我们的函数也有地址(第一条指令的地址),既然指针就是地址,那函数的地址不就是函数的指针咯,所以说什么叫函数指针呢?就是说一个保存函数地址的变量就叫函数指针

如果我们想要保存一个函数的地址我们就可以用到函数指针

1:void (*pfun1)( );

2:void *pfun2( );

先说明()的优先级高于 * 。 根据前面介绍的方法我们可以很容易的辨认出pfun1是一个指针,因为先与 * 结合成为一个指针变量,接着与()结合说明该指针变量指向一个返回值类型为void的函数,因此pfun1就是函数指针。

函数指针数组

数组是一个存放相同类型数据的存储空间,我们已经知道如果数组中存放的是指针,我们就叫他为指针数组。那么,将函数的地址(也就是函数指针)存放于一个数组中我们就将其称为函数指针数组。函数指针数组的定义为:

int (*test[10])( );

test先与[]结合成为一个数组,再与 * 结合成为一个指针数组 ,再与( )结合成为一个函数指针数组,这个数组中的内容就是int (*)( )的函数指针。

指向函数指针数组的指针

首先根据字面意思我们就能够理解到这说的是一个指针。这个指针指向的是一个数组,而这个数组的元素都是函数指针 。我们理清了int (*test[10])( )是一个函数指针数组,那么定义一个纸箱函数指针数组的指针就简单了:

int (*(*test)[10]) ( );

如何理解呢?

首先test先与 * 结合成为一个指针,指针指向何处呢?接下来就与[ ]结合,说明该指针指向一个数组,那么他指向的是一个什么样的数组呢?接着又与最外边的 * 结合,说明指向的是一个指针数组,那么他到底指向的又是怎样的一个指针数组呢?紧接着他又与( )结合,说明指向的是一个函数指针数组,到此我们就知道这是一个指向函数指针数组的指针。在我们的学习或者使用当中就可以以这种抽丝剥茧,逐步逼近的方法一步步的去找到答案。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值