二维数组a[3][3]中p=a,当++p后为什么指向的是a[0][1]而不是a[1][0]呢,*p+1与*(p+1)的区别在哪

p=&a[0][0]... p=&a[0][0] 展开
 我来答
匿名用户
2013-12-26
展开全部
(*(p+i)+j) p+i求行下标j是列下标
*(p[i]+j) p[i]是行下标,j是列下标;
*(*(p+i)+j) *(p+i)取行下标,再加j 取列下标元素;
p+1 指向a[0][1]
p+3 指向a[1][0]

行优先,先走完第一行,后走第二行。
p+1是a[0][1]
p+3是 a[1][0]这是指针
然后 a的话就是指向第一行 a+1是指向第二行 a+2是指向第三行
意思是说
p+1=a[0][1]
p+3=a[1][0]
然后赋值的话 p=a 相当于a[0][0]
p=a+1 相当于 a[1][0]
p=a+2相当于 a[2][0]
1007398410
2013-12-26 · TA获得超过230个赞
知道答主
回答量:139
采纳率:0%
帮助的人:87万
展开全部
a是一个二级指针
指向一个指针数组,为a[0],a[1],a[2]
a[0],a[1],a[2]又分别是指针,指向他们的儿子……
所以p=a;++p;
p本来指向a[0]后增一,指向a[1]
a[1]就是a[1][0];
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无风无云的海角
2013-12-26
知道答主
回答量:14
采纳率:0%
帮助的人:11万
展开全部
没有啊!
++p后是指向a[1][0];
*p+1是行指针变列指针后,列指针+1;
*(p+1)是行指针+1后变为列指针;
#include<stdio.h>
int main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int (*p)[3];
p=a;
++p;
printf("%d\n",*(*p));
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式