打印

数组与指针的关系

[复制链接]
841|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
韩山童|  楼主 | 2017-1-16 09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 韩山童 于 2017-1-16 10:15 编辑

数组名本质上是一个指针(常量指针)。我们举例说明
1. int b[5]={1,2,3,4,5};那么b与*(b+i)等价,其中i=0~4。数组名b代表数组本身,它的类型是int[5]。如果将数组名b当做指针来看,则b的类型是int*,指向的类型是int。即上面说的b与*(b+i)等价。需要注意的是,当将数组名b当做指针来看的时候,这个数组名占据独立的内存单元,即指针占据的内存与数组第一个元素的内存单元不一样。另外需要注意的是,尽管我们可以将数组名当做指针来看,但是当将sizeof作用于数组名时,即sizeof(b),返回的结果是整个数组所占据总字节数,而不是指针所占据的4/8个字节。
2. 如果是二维数组呢:int  a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};,我们可以认为a是一个包含三个元素的一维数组,每一个元素又是一个一维数组,比如a[0]表示的是{1,2,3,4},以此类推。其中我们已经知道了一维数组的情况了。现在讨论:如果将二维数组的名字当做指针来看,会是什么样子?如果a是一个指针,那么它的类型是int(*)[4],它指向的类型是int[4],也就是说a当做指针看待时,它指向的是一个含有4个元素的一维数组int[4],那么a+2表示的是指向第三个数组元素的指针,即指向{9,10,11,12}的指针,那么*(a+2)就表示{9,10,11,12}本身。*(a+2)又是个一维数组,所以*(a+2)+3表示的是指向一维数组{9,10,11,12}第三个元素的指针,那么*(*(a+2)+3)就是12。

可能讲二维数组的时候有点绕,但是只要真正弄懂一维数组了,那么理解多维数组就简单了,因为本质上多维数组可以看做一维数组。而且内存中,多维数组的存储形式和一维数组是一样的。谢谢大家!希望各位大神批评指正!

相关帖子

沙发
韩山童|  楼主 | 2017-1-16 20:49 | 只看该作者
yyy71cj 发表于 2017-1-16 19:03
其实都是一维的,就看你怎么看了

yeah

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

43

帖子

1

粉丝