(*p)[2]二维数组?

求大佬帮忙解释下(*p)[2]为什么是3啊?... 求大佬帮忙解释下(*p)[2]为什么是3啊? 展开
 我来答
cdyzxy
2020-08-31 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3543万
展开全部

通过定义,可以知道:p是一个指针,这个指针指向的是3个一组整数的数据区,当p=a的赋值完成后,p指向a数组的第1组数据即a[0][0],a[0][1],a[0][2],则(*p)[0]就是p[0][0]就是a[0][0],那么(*p)[2]就是p[0][2]就是a[0][2];

如果写(*(p+1))[2]则是p[1][2]也是a[1][2]

百好佳
2020-08-31 · TA获得超过301个赞
知道小有建树答主
回答量:702
采纳率:75%
帮助的人:174万
展开全部
这题有意思,
首先 int a [] [3] = {1,2,3,4,5,6}; 是一个二维数组,但是内存空间中这些数据的存储是连续的。可以理解为 int a [5] = {1,2,3,4,5,6}; a存储的都是数组的首元素地址,区别在于以为一维数组的下标代表的是地址,二维数组下标代表的是行和列的个数。
int (*p)[3]; 这里是用指针的形式 声明一个新的数组,
p = a; 这里把a数组的首元素地址赋给 指针数组,此时新声明的指针数组就指向了a数组,*p就等于a[0];
所以 (*p)[2]等价于a[2] = 3;一维数组下标为二的元素
追问
二维数组都可以理解为一维数组来使用吗?
追答
可以啊,二维数组本来就是嵌套的一维数组
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
庄政警
2020-08-31 · TA获得超过9916个赞
知道大有可为答主
回答量:1113
采纳率:94%
帮助的人:853万
展开全部
C语言中,访问数据时,"[]"操作符实际上就是读取偏移地址内数据的操作符,比如a[b]就是读取从内存a开始往后b个单位的内存的数据,也就是*(a+b),所以*(a+b)和a[b]就是一回事,是等价的。 现在看(*p)[2], *p就是*(p+0),也就是p[0],那(*p)[2]自然就是p[0][2]了,p[0][2]就是3.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最大的宝宝
2020-08-31 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:387万
展开全部
[]和*都有降维作用。如果p是二维指针(或数组),则p[x]或*p降为一维,p[][]或**p降为指向元素。
所以题目中的(*p)降为一维数组后,再[2]就是从一维数组中取第2个元素3了。
最重要的是你得弄清楚p指向哪一个一维数组,以及做类似p+1或p[1]运算时,这个1的跨度有多大(是跨一行还是跨一个元素?),这由当前“p所在的表达式”是几维来决定的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2759a31
2020-09-03 · TA获得超过169个赞
知道小有建树答主
回答量:155
采纳率:75%
帮助的人:31.5万
展开全部
首先a[][3]={1,2,3,4,5,6}表示将1到6这六个数字按三个数进行分组,即每三个数字为一行形成一个二维数组:第0行是1,2,3;第1行是4,5,6.
因为p=a,则(*p)[2]相当于(*a)[2];
又因为a作为二维数组的首地址(也就是a[0][0]的地址),则*(a+i)表示第一个维度(即第i行)的首地址(即*(a+0)为第0行首地址a[0];*(a+1)为第1行首地址a[1];依此类推)。然后,(*(a+i))[j]即可表示第i行第j列元素的值。
综上所述,(*p)[2]=(*a)[2]=(*(a+0))[2]也就是第0行第2列的值,即3.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式