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)
为什么要弄得这么复杂啊,而且看不懂为什么可以这样引用?
这四种书写方法一定满足一些基本原理是吧??
谁能解释一下原理,书上有,但看不懂 展开
书上说引用方法有四种 p[i]+[j] *(*(p+i)+j) (*(p+i))[j]) *(p[i]+j)
为什么要弄得这么复杂啊,而且看不懂为什么可以这样引用?
这四种书写方法一定满足一些基本原理是吧??
谁能解释一下原理,书上有,但看不懂 展开
3个回答
展开全部
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) 都是一样的了
纯手打,望能有所帮助
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) 都是一样的了
纯手打,望能有所帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
原理:*(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]
所以:*(*(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]
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p指向i*j的二维数组;
*(p+i)指向长度为j的一维数组;
p[i]也指向长度为j的一维数组;
*(p+i)指向长度为j的一维数组;
p[i]也指向长度为j的一维数组;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询