c语言中,指针于二维数组的问题

假设我们引用二维数组a中的元素a[I][J],指针P指向a。书上说引用方法有四种p[i]+[j]*(*(p+i)+j)(*(p+i))[j])*(p[i]+j)为什么要弄... 假设我们引用二维数组a中的元素a[I][J],指针P指向a。
书上说引用方法有四种 p[i]+[j] *(*(p+i)+j) (*(p+i))[j]) *(p[i]+j)
为什么要弄得这么复杂啊,而且看不懂为什么可以这样引用?
这四种书写方法一定满足一些基本原理是吧??
谁能解释一下原理,书上有,但看不懂
展开
 我来答
wwwbjj1988
2013-04-18 · TA获得超过185个赞
知道小有建树答主
回答量:273
采纳率:100%
帮助的人:190万
展开全部
a[i][j]是二维数组,所以要让指针能指向数组中的每个存储,就至少需要个指针数组p[i];

i是表示指针指向的是数组中的哪一行,然后具体到某行中的第J个,就跟一维数组+指针的一样了

设有个 a[i], p=a, 这时候默认p是指向数组头,也就是相当于p[0];
要想指向数组第5个数,指针右移5个位置,就是p+5, 这时候指针指向的就是a[4];所以p也可以写成p[4],这就是指针数组了,p和a一一对应;
所以 *(*(p+i)+j) 或者(*(p+i)[j] )和*(p[i]+j) 都是一样的了

纯手打,望能有所帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
abidughw
2013-04-18 · TA获得超过904个赞
知道小有建树答主
回答量:572
采纳率:66%
帮助的人:282万
展开全部
原理:*(p+i)==p[i]
所以:*(*(p+i)+j)=(*(p+i))[j]=(p[i])[j]=p[i][j]
*(p[i]+j)=(p[i])[j]=p[i][j]
推理: *p=*(p+0)=p[0]
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ID鸡蛋炒韭菜
2013-04-18 · TA获得超过391个赞
知道小有建树答主
回答量:570
采纳率:50%
帮助的人:74.6万
展开全部
p指向i*j的二维数组;
*(p+i)指向长度为j的一维数组;
p[i]也指向长度为j的一维数组;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式