若有定义语句int a[2][3],*p[3]那么为什么p[0]=a;语句不对?

 我来答
renjianke
2009-09-08 · TA获得超过2932个赞
知道小有建树答主
回答量:580
采纳率:0%
帮助的人:660万
展开全部
p[0]=a??这怎么看都是错误的!!

指针是比较难理解的。
你要分清 指针和数组的关系, 指针数组的概念。
int a[2][3]={0,1,2,3,4,5};
如果你定义 int *p 怎样使用p访问此多维数组的值呢?
这种情况 p的初始化是:p =a[0];
访问数组的得代码是:
int *p;
for(p =a[0];p<a[0]+6;p++)
cout<<*p<<endl;

如果定义了 int *p[2];则他是指针数组,其每一个元素都是一个指针,其初始化是:p[0] = a[0];p[1]=a[1];//实质是把每一行的首元素地址赋给指针数组的相应元素
或者 *p[2] = {a[0],a[1]};
访问数组元素的代码是:
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
cout<<*(*(p+i)+j)<<endl;

而(*p)[3];定义了一个一维数组,此数组有3个元素
用(*p)[3]和二维数组联系起来则访问多维数组元素代码是:
int a[2][3] ={0,1,2,3,4,5};
int (*p)[3];
p = a;
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
cout<<*(*(p+i)+j)<<endl;
二维数组名a指向一个包含3个元素的a[0],而(*p)[3]就是指向一个一维数组的指针变量,所以使用 p = a初始化指针变量。

如果是 int a[3];
int b[4];
int (*)p[3];
则 p = a //错误,a是一个整型地址
p = &b //错误,&b是一个 int[4]的地址
p = &a //正确

所以用 int (*p)[]访问一位维数组的代码如下:
int a[3] ={0,1,2};
int (*p)[3];
p = &a;
int i;
for(i=0;i<3;i++)
cout<<*((*p)+i)<<endl;
百度网友d3e418b2c
推荐于2016-05-21 · TA获得超过2195个赞
知道大有可为答主
回答量:1361
采纳率:0%
帮助的人:1701万
展开全部
int a[2][3]是二维数组
int *p[3]是一维指针数组,意思是由3个一维指针组成的数组,其中p[0],p[1],p[2]是3个一维指针
所以就很明显了,a是二维的,p[0]是一维的,不可以赋值
如果是二维指针,如:int **p; 那么p=a;就是正确的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LuoJi_1995
2009-09-07 · TA获得超过1714个赞
知道小有建树答主
回答量:613
采纳率:0%
帮助的人:764万
展开全部
看*p[3]这部分,由于右结合性,所以p首先是一个数组,然后它才是一个指针,所以他是3个指针,而不是“指向带有三个元素的数组”的指针。

所以p[0]=a;是错误的

应该这样写:
int a[2][3],(*p)[3];
p=a;

这样是正确的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SKY小风
2009-09-15
知道答主
回答量:22
采纳率:0%
帮助的人:2.2万
展开全部
数组没有定义好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式