
int a[2][3] ,*p[3] ,p=a为什么是错的 p[o]=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[3]表示的是声明的一个指针数组,在这个数组中的每一个成员都是一个指向int型的指针,因此只能对p[0]赋于int型变量的地址,比如int i=1; 则可以使用p[0]=&i来赋值。同样可以使用p[0]=a[0];或者p[0]=&a[0]
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询