指针和数组,函数的结合

上次分析了一些关于指针和数组的一些相关题目,接下来就是对指针的更深层次的应用学习。当然,应用的前提是理解,接下来我就分析一些指针的应用类型以便于更好的应用。

1.指针数组:

我们先来分析它的名称,“指针数组”中的“指针”只是一个形容词,“数组”才是它的词根。那么我们就知道了:“指针数组”本质上是一个数组,是一个内含元素为“指针”的“数组”。

我们来举一个指针数组的例子帮助我们更好的理解:

int *arr[4] = {"zhi","zhen","shu","zu"}

上面的这个代码定义的就是一个指针数组,它有四个元素。它的四个元素均为指针,分别指向"zhi","zhen","shu"和"zu"四个字符串地址的指针。

我们画一个模拟图来更形象的理解:

2.数组指针:

根据上一个的解读方式,我们可以知道“数组指针”就是一个指针,是一个存放数组地址的指针。

我们来举一个例子:

int (*arr)[4]

它是不是和“指针数组”很像呢?它和数组指针的区别就在一个括号。“[]”的优先级要高于“*”,所以在指针数组中“arr”先和“[]”进行结合,这就确定了“arr”是一个数组;“数组指针”中加了括号后,“arr”先和“*”结合,所以“arr”是一个指针。

我们再来画一个模拟图:

3.函数指针:

“函数指针”本质上就是一个指针,指向一个函数。

函数也有地址,存放函数地址的指针就叫函数指针。它的一般形式为:“void (*p) (int)”。这里的"void"是函数返回的类型,“(*p)”定义了这个整体的性质为指针,“((int))”则是函数的参数类型。所以“void (*p) (int)”就是一个函数指针,这个函数的参数类型为“int”型,返回类型为“void”型。

4.函数指针数组:

“函数指针数组”本质是是一个数组,它的每一个元素都是指针--指向一个函数的指针。

这个概念似乎十分饶口并且难以理解,但在本质是还是一个数组,只是数组的元素类型是函数指针而已。我们在“函数指针”的基础上进行理解就会变得十分易懂。“函数指针数组”的一般形式为:“void (*p[]) (int)”。我们把它和上面的函数指针形式进行比较就可以发现,它们的区别就在于“[]”这个符号上。我们来解析一下,"p"先与“[]”符号进行结合,这就给这个整体定义为数组的性质。接着分析,就和“函数指针”的分析过程一致,由于它的整体性质是数组,所以结合起来就是“函数指针数组”

5.函数指针数组指针:

“函数指针数组指针”本质上是一个指针,它指向一个数组--成员为函数指针的数组。

我们在2.数组指针知道指针可以指向一个数组,“函数指针数组指针”的本质就是一个指向数组的指针,只不过这个素组比较特殊,它的元素是函数指针。我们在“函数指针数组”的基础上来进行理解。“函数指针数组指针”的一般形式为:“void (*(*p)[]) (int)”。它和“函数指针数组”一般形式的区别就在于“(*)”这个符号上。这个符号使“p”先与一个“*”结合这就给这个整体定义为指针的性质。接着分析,就和“函数指针数组”的分析过程一致,由于它的整体性质是指针,所以结合起来就是“函数指针数组指针”。

我们通过上面的解析发现“函数指针”“函数指针数组”和“函数指针数组指针”之间有很深的联系,那么让我们将它们画在在一张模拟图上来进行理解:

这样将它们放在一起就容易理解多了。

以上的内容中如果有什么问题欢迎大家指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值