鱼C论坛

 找回密码
 立即注册
查看: 1172|回复: 4

[已解决]该怎么去理解数组指针指向二维数组呢?

[复制链接]
发表于 2022-2-19 00:02:28 | 显示全部楼层 |阅读模式
10鱼币
代码:
int array[2][3] = {{0, 1, 2}, {3, 4, 5}};
int (*p)[3] = array;

按数组指针的定义:指针p是指向一个有三个元素的数组。
然后二维数组:0  1  2
                      3  4  5
嗯,无法理解。为什么(*p)【3】=array
还有**(p+1)在上面的代码中又是该怎么理解呢?
最佳答案
2022-2-19 00:02:29
本帖最后由 zzzyl 于 2022-2-19 11:15 编辑

首先,当定义一个普通数组时,数组名指向第一个数组元素的地址,类似于指针,所以有 int(*p) = array,这是一维数组与普通指针。

在此基础上理解二维数组和数组指针,二维数组array[2][3]可以理解为数组的数组,类似于一个指针指向了一个另指针。(*p)[3]可以理解为一个指针指向含有三个元素一个数组,可以粗浅理解为一个指针指向了另一个指针,这样来看,就有了int(*p)[3] = array[2][3]。这只是简单理解,实际上因为它们的跨度是相同的,都是3。

**(p + 1)可以看作是p[1]或者p[1][0]。因为定义的是int (*p)[3],指针p的跨度是3,即p+1相当于移动三个int元素的长度,也就是一个含有三个int元素的数组长度,所以p+1指向二维数组中{3,4,5}。*被叫做解引用,可以简单理解为[],一个*相当于一个[],例如*(*(p + 1) + 2)就可以看作是p[1][2]。

上面只是比较简单的理解指针(其实我自己都这么理解的),想要更深入的话需要看书或者看相关视频。小甲鱼的《带你学c带你飞》里关于指针讲的也挺清楚的。

最佳答案

查看完整内容

首先,当定义一个普通数组时,数组名指向第一个数组元素的地址,类似于指针,所以有 int(*p) = array,这是一维数组与普通指针。 在此基础上理解二维数组和数组指针,二维数组array[2][3]可以理解为数组的数组,类似于一个指针指向了一个另指针。(*p)[3]可以理解为一个指针指向含有三个元素一个数组,可以粗浅理解为一个指针指向了另一个指针,这样来看,就有了int(*p)[3] = array[2][3]。这只是简单理解,实际上因为它们的跨度 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-19 00:02:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zzzyl 于 2022-2-19 11:15 编辑

首先,当定义一个普通数组时,数组名指向第一个数组元素的地址,类似于指针,所以有 int(*p) = array,这是一维数组与普通指针。

在此基础上理解二维数组和数组指针,二维数组array[2][3]可以理解为数组的数组,类似于一个指针指向了一个另指针。(*p)[3]可以理解为一个指针指向含有三个元素一个数组,可以粗浅理解为一个指针指向了另一个指针,这样来看,就有了int(*p)[3] = array[2][3]。这只是简单理解,实际上因为它们的跨度是相同的,都是3。

**(p + 1)可以看作是p[1]或者p[1][0]。因为定义的是int (*p)[3],指针p的跨度是3,即p+1相当于移动三个int元素的长度,也就是一个含有三个int元素的数组长度,所以p+1指向二维数组中{3,4,5}。*被叫做解引用,可以简单理解为[],一个*相当于一个[],例如*(*(p + 1) + 2)就可以看作是p[1][2]。

上面只是比较简单的理解指针(其实我自己都这么理解的),想要更深入的话需要看书或者看相关视频。小甲鱼的《带你学c带你飞》里关于指针讲的也挺清楚的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-19 00:21:02 | 显示全部楼层
学汇编语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-19 01:40:52 | 显示全部楼层
按数组指针的定义:指针p是指向一个有三个元素的数组。  这个理解错误啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-19 15:43:55 | 显示全部楼层
zzzyl 发表于 2022-2-19 00:02
首先,当定义一个普通数组时,数组名指向第一个数组元素的地址,类似于指针,所以有 int(*p) = array,这是 ...

我看了谭浩强的c语言程序设计和你的理解是差不多的,谢谢大佬!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 12:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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