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

p=&a[0][0]

(*(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]
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-26
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];本回答被网友采纳
第2个回答  2013-12-26
没有啊!
++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;
}
相似回答