关于用指针指向数组

如果inta[10];int*p1;int(*p2)[10];指针p1和p2都可以指向数组a,再引用数组a,请问下这两种有什么区别吗?还有请问下int(*p2)[10]这... 如果
int a[10];
int *p1;
int (*p2)[10];

指针p1和p2都可以指向数组a,再引用数组a,请问下这两种有什么区别吗?
还有请问下int (*p2)[10]这种方法具体怎么用,请介绍下啊,谢谢了。
展开
 我来答
zotin
推荐于2017-11-23 · TA获得超过662个赞
知道小有建树答主
回答量:167
采纳率:0%
帮助的人:229万
展开全部
两者都是指针,但指向的数据类型完全不同。
p1指向的是整数,这好理解。
p2指向的是长度为10的数组。
p1 = a是完全没有问题的。
p2 = a其实是做了自动类型转换的,通常会有警告(在某些编译器上甚至通不过)。
虽然p1 = a,p2 = a后,*p1是一个整数,*p2是一个数组的地址(在这里是a);
p1 ++ 将使p1指向a[0]后面的一个整数。
而p2 ++ 将是p2指向a后面的一个数组。

像p2这样指向数组的指针通常用于2维数组。
比如b[3][10];
那么p2 = b后,*p, *(p+1), *(p+2)分别是b[0], b[1], b[2]。
利用p++可以遍历这些长度为10的数组。
百度网友3d97b07
2010-09-24 · TA获得超过162个赞
知道答主
回答量:63
采纳率:0%
帮助的人:55.5万
展开全部
a[10]这个数组在内存上是一个接一个的a[0]的下一个是啊a[1]

p1=a是用p1指向a的首地址,就是a[0],p++可以指向下一个地址,就是a[1]
(*p2)[10]是一个指针数组,每一个成员指向数组a的每一个成员,指针赋值时要用循环
char i=0;
while(i<=10)p2[i]=a[i++];
用就直接*p2[2]就了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
saltedfish1987
2010-09-14 · 超过22用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:53.8万
展开全部
p1可以指向任意长度的数组,p2只能指向长度为10的数组,这两种方式引用数据时差不多的,都可以使用p[i]或者*(p+i)的形式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式