p=a 为什么是错误的

来源:网友推荐     更新:2025-05-16
为什么p=a;是错的?

p与a的类型不同,因此是错误的。p的类型是:int *,a的类型是 int (*)[4]。
static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (*p)[4];
p=a; //这样类型就一致了。

要想使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]

a是2维数组首地址,即双重指针常量
p是一维指针,所以不行。

非要用的话,可以强制转换
p = (int *)a;

a代表的是a[4][10] 数组的首地址 也就是a[0][0],及a==a[0][0]; p是个指针变量p的值只能是地址,而a只是代表a[4][10]的第一个元素的下标,它并不是地址值,应这样写:p = &a; 看看行不行,几百年前学的,不知记得准不准确 哦 忘了是二维数组,p=a[0],对

a是二维数组啊,*P只能指向一维数组的某一位

a[4][10]是二维指针,所以p=a[0];是正确的,如果你想用p指向a[0][0],可以这样:p=&a[0][0]

相关链接

  • 下列说法哪些是错误的
  • 正确还是错误
  • 以下哪种描述是错误的
  • 考试焦虑下列错误的是
  • 错觉是错误的知觉吗
  • 来自于网友分享,若有事请联系
    © 好有爱分享网