关于用指针指向数组
如果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]这种方法具体怎么用,请介绍下啊,谢谢了。 展开
int a[10];
int *p1;
int (*p2)[10];
指针p1和p2都可以指向数组a,再引用数组a,请问下这两种有什么区别吗?
还有请问下int (*p2)[10]这种方法具体怎么用,请介绍下啊,谢谢了。 展开
3个回答
展开全部
两者都是指针,但指向的数据类型完全不同。
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的数组。
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的数组。
展开全部
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]就了
p1=a是用p1指向a的首地址,就是a[0],p++可以指向下一个地址,就是a[1]
(*p2)[10]是一个指针数组,每一个成员指向数组a的每一个成员,指针赋值时要用循环
char i=0;
while(i<=10)p2[i]=a[i++];
用就直接*p2[2]就了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p1可以指向任意长度的数组,p2只能指向长度为10的数组,这两种方式引用数据时差不多的,都可以使用p[i]或者*(p+i)的形式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询