8个回答
展开全部
追问
二维数组都可以理解为一维数组来使用吗?
追答
可以啊,二维数组本来就是嵌套的一维数组
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
[]和*都有降维作用。如果p是二维指针(或数组),则p[x]或*p降为一维,p[][]或**p降为指向元素。
所以题目中的(*p)降为一维数组后,再[2]就是从一维数组中取第2个元素3了。
最重要的是你得弄清楚p指向哪一个一维数组,以及做类似p+1或p[1]运算时,这个1的跨度有多大(是跨一行还是跨一个元素?),这由当前“p所在的表达式”是几维来决定的
所以题目中的(*p)降为一维数组后,再[2]就是从一维数组中取第2个元素3了。
最重要的是你得弄清楚p指向哪一个一维数组,以及做类似p+1或p[1]运算时,这个1的跨度有多大(是跨一行还是跨一个元素?),这由当前“p所在的表达式”是几维来决定的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先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.
因为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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |