指针与数组

这篇博客用来介绍指针与数组,在本人《歌德巴赫猜想———极限算法》这一节中使用到的一种动态定义数组的方法

很多人是在学完c语言以后就开始学习数据结构与算法这门课程了,在以往的学习中,几乎没有能够使用到数组指针的地方,那么,为什么要介绍“指针与数组”呢?
在今后的学习中,我们要编写的大部分代码是面向于用户的,那么问题来了,如果一个要定义的数组的长度用户来决定,那么,这个数组要怎么来实现呢?
这就牵扯到了这篇博客的主题——指针与数组。

好的,进入主题,我来介绍一下指针与数组的关系:
首先,数组指针(动态定义数组长度):

数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。

例如:int (*p)[10];

这里对上面的变量定义做一个说明:在c语言编译系统中,[size]的优先级高于*,所以,要用优先级最高的()将 * 和变量名“保护”起来,使*优先于[size],这样才能实现数组指针的定义。
所以,p即为指向数组的指针,又称数组指针。这里的p的本质是指针,是一个指向一个含有10个int 型变量的数组。

由此,可以推出,假设有这种定义:TYPE (*point)[size],那么,point所指向的空间是一个含有size个TYPE类型元素的数组的首地址。

其次,指针数组:

指针数组,就是说首先是一个数组,而数组的元素是指针,也就是说,如果数组元素都是相同类型的指针,则称这个数组为指针数组。所谓相同类型的指针是说指针所指向的对象类型是相同的。

这里来举个例子,在过去的学习中,我们学习过字符串,而字符串的类型是char *,所以假设一个数组的类型是char *,那么该指针数组就是类似于存放字符串的数组,只不过数组中的每个元素都是对应字符串的指针。

例如:二维指针数组可以定义为:char *array[2]={“uxiebi2ue2bx”,“jevi2hexo”}};
在这里,这里来解释一下:
array数组的类型是char *[2],那么,该数组就是一个含有两个元素的空间,并且各元素均指向一个长度任意的字符串的空间。

由此,可以推出,假设有这种定义:TYPE shuzu[size],那么shuzu数组的类型是TYPE[size],所以,该数组含有size个元素,并且各元素均为含有任意个TYPE 型变量的连续存储空间的首地址(即:指向含有任意个TYPE类型变量的连续存储空间)。

看了上面的描述后,连我都有点晕乎了。
那么最后,来为这两个“关系复杂”的名词进行一个总结:
其实我们要分别这两个定义其实很简单,究其本质去观察:
1.指针数组的本质是数组,它的修饰词是指针,那么这个数组的各元素均为指针,指向空间由*TYPE前的部分来定义,个数由size决定。
2.数组指针的本质是指针,它的修饰词是数组,那么这个指针所指向的是一个数组的首地址,那么,被指向的数组的类型和长度由(*TYPE)以外的部分来决定 。

而关于怎么去使用这两个概念,我们需要用到<malloc.h>库中的 colloc(首推) 或者 malloc 以及 free函数。至于详细操作,可以在本人《歌德巴赫猜想———极限算法》这一篇博客或者今后的博客中用到。

希望这篇博客能够帮助正在学习数据结构与算法的朋友,至于可能还会用到的函数指针,将在今后的博客中进行详细的介绍。
如果本人对于指针的理解不透彻或者是存在一些错误,希望在下方的留言区多多提出,以便后来观看的未来程序员们不会被本人误导,谢谢大家!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值