p=a 为什么是错误的
来源:网友推荐 更新:2025-05-16
为什么p=a;是错的?
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]
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]
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]