zhengyihao1 发表于 2018-8-3 11:21:56

指针和二维数组 求教,太难受了- -

求解释一下我圈起来的那部分应该如何理解 求大神教教我,新手入门实在过不去了!!!

无符号整形 发表于 2018-8-3 11:27:38

本帖最后由 无符号整形 于 2018-8-3 11:43 编辑

目测:
第一个是访问array
第二个是访问array
第三个是访问array
第四个是访问array
第五个是访问array
第六个不用说了吧……
原因3楼。

TOP_LK 发表于 2018-8-3 11:29:16

{:10_256:}

无符号整形 发表于 2018-8-3 11:43:02

本帖最后由 无符号整形 于 2018-8-3 11:44 编辑

首先要理解它们你要知道:
数组即指针,它们只是被自动分配了内存的指针。
然后*p是一个指针数组,里面有3个指针,(这三个指针指向了array、array、array)
所以第一个应该就很好理解了,相当于:
*p和array(*p指向array的起始地址,所以+1下标就是1)
第二个相当于:
array(array实际上是一个指向指针的指针,看图(太小的话下载下来看):)
(这个图有个错误,那两个指针指向的是数据1不是数据2)

所以**array+1相当于:
取array的第1(0+1)个数据(指针)指向的第0个数据(前面的这些文字用代码表示便是*(*array+1))
第三个不用说了吧
第四个相当于取array的第0+1个数据(指针)指向的第0+2个数据,即取array
第五个和第四个一样
第六个也不用说了吧……

claws0n 发表于 2018-8-3 11:43:11

先看这边的例子:
int a; int *p = &a; 那么 p == &a ;也就是说指针是指向数组的第一个元素

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

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

**(p+1)                     p 的跨度是 3, p+1 = 4,解引用 == 第四个元素 == 3
**(array +1)               array的跨度也是 3
array                  直接访问 array 的第二行,第一列
*(*(p+1)+2)                *(p+1) 还是指针(第二行,第一列),+2(往右边移动两格)
*(*(array+1)+2)          array 跟 p 是一样的
array                  直接访问array 的第二行,第三列

zhengyihao1 发表于 2018-8-3 14:40:17

感谢大家顶力相助我想我把最佳答案给了楼上可能是因为他的答案更适合我理解吧
页: [1]
查看完整版本: 指针和二维数组 求教,太难受了- -