指针指向问题p = a,和p = &a
3个回答
展开全部
你主要是不理解指针与指针的指针之间的区别才会出错,比如有一个二维数组a[3][3];
_1
2
3
//a[0]
4
5
6
//a[1]
7
8
9
//a[2]
它有3行3列,其中的_表示光标的位置。首先得注意这里的a它与一维数组不一样,它指向存放数组首地址的指针,是指针的指针。如果电脑要找这个数组里的一个元素就必须知道它在哪一行哪一列,所以光标要能左右和上下运动。比如我要取a[2][1]的地址就必须写成,*(a+2)+1。a+2表示让光标向下移两行,它是行之间的运动,因为a+2是指针的指针,所以前面加上个取值符表示取a+2里面的值,也就是第二行的首地址,之后光标就只能左右运动了,它的操作跟一维数组一样。说形象点就好比我把一把钥匙放在包里再把我的包放在袋子里一样,这里的钥匙就好比a[2][1]的值,包就好比*(a+2),那个袋子就是a+2。
知道了这个你的问题就很好解释了。int(*p)[2]它是指向数组的指针,我喜欢称它为行指针,因为它跟前面的a,a+2一样都是指向数组某一行的首地址的指针,它是指针的指针。而你上面是个一维数组,a是直接存放a[0]的地址的,它只是一个指针与p不是一种类型的,你必须加个取地址符&使它成为指针的指针,才能把它赋给p。你可以试一试如果用我上面的二维数组的话直接写p=a就可以了。如果不懂还能追问。
_1
2
3
//a[0]
4
5
6
//a[1]
7
8
9
//a[2]
它有3行3列,其中的_表示光标的位置。首先得注意这里的a它与一维数组不一样,它指向存放数组首地址的指针,是指针的指针。如果电脑要找这个数组里的一个元素就必须知道它在哪一行哪一列,所以光标要能左右和上下运动。比如我要取a[2][1]的地址就必须写成,*(a+2)+1。a+2表示让光标向下移两行,它是行之间的运动,因为a+2是指针的指针,所以前面加上个取值符表示取a+2里面的值,也就是第二行的首地址,之后光标就只能左右运动了,它的操作跟一维数组一样。说形象点就好比我把一把钥匙放在包里再把我的包放在袋子里一样,这里的钥匙就好比a[2][1]的值,包就好比*(a+2),那个袋子就是a+2。
知道了这个你的问题就很好解释了。int(*p)[2]它是指向数组的指针,我喜欢称它为行指针,因为它跟前面的a,a+2一样都是指向数组某一行的首地址的指针,它是指针的指针。而你上面是个一维数组,a是直接存放a[0]的地址的,它只是一个指针与p不是一种类型的,你必须加个取地址符&使它成为指针的指针,才能把它赋给p。你可以试一试如果用我上面的二维数组的话直接写p=a就可以了。如果不懂还能追问。
展开全部
int
a[2][3]
=
{{1,
2,
3},
{4,
5,
6}};
int
(*
p)[3];
这里的p是一个指向拥有3个整形元素的数组的
指针,即p可以指向一个
有三个元素的一维数组
p
=
&a;//a是一个二维数组,a表示指向这个二维数组数组的第一行,其效果等价于p
即
p=a是正确的
;而&a是将一个二维数组的地址赋值给p;
当然不符合前面定义的p
int
a[2]
=
{1,
2};
int
(*
p)[2];
这里的p是一个指向拥有2个整形元素的数组的
指针
p
=
&a;
//这里a就是一个拥有两个整形元素的数组,&a此时表示将一个拥有两个整形元素的数组的地址赋值给p,符合p的定义
楼主可以多看看数组和指针的相关资料,会更加清晰的,若有不懂可追问
a[2][3]
=
{{1,
2,
3},
{4,
5,
6}};
int
(*
p)[3];
这里的p是一个指向拥有3个整形元素的数组的
指针,即p可以指向一个
有三个元素的一维数组
p
=
&a;//a是一个二维数组,a表示指向这个二维数组数组的第一行,其效果等价于p
即
p=a是正确的
;而&a是将一个二维数组的地址赋值给p;
当然不符合前面定义的p
int
a[2]
=
{1,
2};
int
(*
p)[2];
这里的p是一个指向拥有2个整形元素的数组的
指针
p
=
&a;
//这里a就是一个拥有两个整形元素的数组,&a此时表示将一个拥有两个整形元素的数组的地址赋值给p,符合p的定义
楼主可以多看看数组和指针的相关资料,会更加清晰的,若有不懂可追问
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先得理解int
(*p)[2],p是一个指针,他指向一个具有两个元素的数组,数组里的元素是int型。
好了,来看一下。现在是给指针初始化,就类似于int
*p=&a一样,要把a的地址给他。希望能帮到你,谢谢。
(*p)[2],p是一个指针,他指向一个具有两个元素的数组,数组里的元素是int型。
好了,来看一下。现在是给指针初始化,就类似于int
*p=&a一样,要把a的地址给他。希望能帮到你,谢谢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询