鱼C论坛

 找回密码
 立即注册
查看: 1401|回复: 6

[已解决]指针和二维数组 求教,太难受了- -

[复制链接]
发表于 2018-8-3 11:21:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求解释一下我圈起来的那部分应该如何理解 求大神教教我,新手入门实在过不去了!!!
最佳答案
2018-8-3 11:43:11
先看这边的例子:
int a[10]; int *p = &a; 那么 p == &a[0] ;也就是说指针是指向数组的第一个元素

int temp[5] = {1,2,3,4,5};
int (*p)[5] = &temp;
int temp[5] 是不是跟 (*p)[5] 很像?所以 (*p)[5]是数组,但所存储的资料是地址。

你的例子:
int array[2][3] = {{0,1,2},{3,4,5}};
int (*p)[3] = array;        p 的跨度是 3

**(p+1)                       p 的跨度是 3, p+1 = 4,解引用 == 第四个元素 == 3
**(array +1)                 array的跨度也是 3
array[1][0]                  直接访问 array 的第二行,第一列
*(*(p+1)+2)                *(p+1) 还是指针(第二行,第一列),+2(往右边移动两格)
*(*(array+1)+2)          array 跟 p 是一样的
array[1][2]                    直接访问array 的第二行,第三列
7FYRJ@31TSDKPAHAYUM%`VR.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 11:27:38 | 显示全部楼层
本帖最后由 无符号整形 于 2018-8-3 11:43 编辑

目测:
第一个是访问array[1][3]
第二个是访问array[1][0]
第三个是访问array[1][0]
第四个是访问array[1][2]
第五个是访问array[1][2]
第六个不用说了吧……
原因3楼。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 11:29:16 | 显示全部楼层

点评

呜呜呜你占楼!!  发表于 2018-8-3 11:36
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 11:43:02 | 显示全部楼层
本帖最后由 无符号整形 于 2018-8-3 11:44 编辑

首先要理解它们你要知道:
数组即指针,它们只是被自动分配了内存的指针。

然后*p是一个指针数组,里面有3个指针,(这三个指针指向了array[0]、array[1]、array[2])
所以第一个应该就很好理解了,相当于:
*p[0][1]和array[0][1](*p指向array的起始地址,所以+1下标就是1)
第二个相当于:
array[0][1](array实际上是一个指向指针的指针,看图(太小的话下载下来看):)
(这个图有个错误,那两个指针指向的是数据1不是数据2)
thepointer.png
所以**array+1相当于:
取array的第1(0+1)个数据(指针)指向的第0个数据(前面的这些文字用代码表示便是*(*array+1))
第三个不用说了吧
第四个相当于取array的第0+1个数据(指针)指向的第0+2个数据,即取array[1][2]
第五个和第四个一样
第六个也不用说了吧……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 11:43:11 | 显示全部楼层    本楼为最佳答案   
先看这边的例子:
int a[10]; int *p = &a; 那么 p == &a[0] ;也就是说指针是指向数组的第一个元素

int temp[5] = {1,2,3,4,5};
int (*p)[5] = &temp;
int temp[5] 是不是跟 (*p)[5] 很像?所以 (*p)[5]是数组,但所存储的资料是地址。

你的例子:
int array[2][3] = {{0,1,2},{3,4,5}};
int (*p)[3] = array;        p 的跨度是 3

**(p+1)                       p 的跨度是 3, p+1 = 4,解引用 == 第四个元素 == 3
**(array +1)                 array的跨度也是 3
array[1][0]                  直接访问 array 的第二行,第一列
*(*(p+1)+2)                *(p+1) 还是指针(第二行,第一列),+2(往右边移动两格)
*(*(array+1)+2)          array 跟 p 是一样的
array[1][2]                    直接访问array 的第二行,第三列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-3 14:40:17 | 显示全部楼层
感谢大家顶力相助我想我把最佳答案给了楼上可能是因为他的答案更适合我理解吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 04:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表