3个回答
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]
*(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]
展开全部
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];
指向一个指针数组,为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];
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有啊!
++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;
}
++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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询