若有定义语句int a[2][3],*p[3]那么为什么p[0]=a;语句不对?
展开全部
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;
指针是比较难理解的。
你要分清 指针和数组的关系, 指针数组的概念。
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;
展开全部
int a[2][3]是二维数组
int *p[3]是一维指针数组,意思是由3个一维指针组成的数组,其中p[0],p[1],p[2]是3个一维指针
所以就很明显了,a是二维的,p[0]是一维的,不可以赋值
如果是二维指针,如:int **p; 那么p=a;就是正确的
int *p[3]是一维指针数组,意思是由3个一维指针组成的数组,其中p[0],p[1],p[2]是3个一维指针
所以就很明显了,a是二维的,p[0]是一维的,不可以赋值
如果是二维指针,如:int **p; 那么p=a;就是正确的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看*p[3]这部分,由于右结合性,所以p首先是一个数组,然后它才是一个指针,所以他是3个指针,而不是“指向带有三个元素的数组”的指针。
所以p[0]=a;是错误的
应该这样写:
int a[2][3],(*p)[3];
p=a;
这样是正确的
所以p[0]=a;是错误的
应该这样写:
int a[2][3],(*p)[3];
p=a;
这样是正确的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询