int a[2][3] ,*p[3] ,p=a为什么是错的 p[o]=a是对的

 我来答
黄邦勇帅哥哥
2010-03-16 · TA获得超过3989个赞
知道大有可为答主
回答量:1199
采纳率:100%
帮助的人:580万
展开全部
要想使p=a正确,请使用int (*p)[3];的声明,该语句表示,指针p是一个指向含有三个元素的一维数组的指针。而a[2][3]中的数组名a,表示的是指向二维数组第一行中含有3个元素的数组的指针,因此可以对其赋值。数组名不是像一楼说的a是指向的a[0][0],而是指向的a[0]也就是说a表示的是a[0]的地址&a[0]。因为a=a+0,因此a+1指向的是a[1]的地址,即&a[1]。指向a[0][0]的是a[0]也就是说a[0]本身就是一个地址,你可以输出a[0]就知道了。而*a[0]就能输出a[0][0]的值。即a[0]指向的是&a[0][0]
*p[3]表示的是声明的一个指针数组,在这个数组中的每一个成员都是一个指向int型的指针,因此只能对p[0]赋于int型变量的地址,比如int i=1; 则可以使用p[0]=&i来赋值。同样可以使用p[0]=a[0];或者p[0]=&a[0]
百度网友eaba88f
推荐于2018-05-06 · TA获得超过875个赞
知道小有建树答主
回答量:358
采纳率:0%
帮助的人:146万
展开全部
语句整理如下:
int a[2][3] ,*p[3];
/*a[2][3]二维数组;*/
/*p[3]指针数组(注意:不是数组指针)*/
a可以作为地址来使用,a的值为&a[0][0];
p为指针数组首地址,p的值为&p[0];
由此可知p是一个常量地址值&p[0]不能进行赋值。
而p[0]则是一个指针变量。

论证完毕...
不懂的话,百度hi我。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式