
int a[5][5]={0}; int *p[5]; 为什么不能p=a呢
4个回答
展开全部
①你定义的是数组列指针,其实你可以这样想p[5]代表5个指针p[0],p[1]~p[4],
②我也看了你的追问p确实是p[0]的地址,你让p[0]的地址等于a[0]的地址,这就意味着 指针和数组同享一个地址,因此a[0]的地址也是p[0]的地址,但是不意味着p[0]就是a[0]了,试想在同一个座位上做两个不同的人,他们自然不会舒服的,因此造成形参不一,发生冲突
③回到①,因为p[i]为列指针,因此赋值时 同一般的列指针相同,如int *fp;访问a[5][5]时,必须给fp赋值成fp=a[0],这样fp=&a[0][0],同理p[0]=a[0],这样p[0]=&a[0][0]
访问数组时直接可以是 *(p[i]+j)或*p[i][j]
②我也看了你的追问p确实是p[0]的地址,你让p[0]的地址等于a[0]的地址,这就意味着 指针和数组同享一个地址,因此a[0]的地址也是p[0]的地址,但是不意味着p[0]就是a[0]了,试想在同一个座位上做两个不同的人,他们自然不会舒服的,因此造成形参不一,发生冲突
③回到①,因为p[i]为列指针,因此赋值时 同一般的列指针相同,如int *fp;访问a[5][5]时,必须给fp赋值成fp=a[0],这样fp=&a[0][0],同理p[0]=a[0],这样p[0]=&a[0][0]
访问数组时直接可以是 *(p[i]+j)或*p[i][j]
展开全部
当定义int *p[5]时, p是一个数组, 含有5个int *的元素.
所以赋值只能是赋值p[0]到p[4], 而不能改变p本身的值(数组名不能赋值.)
如果要p=a这样赋值,需要定义数组指针
即
int (*p)[5];
p=a;
所以赋值只能是赋值p[0]到p[4], 而不能改变p本身的值(数组名不能赋值.)
如果要p=a这样赋值,需要定义数组指针
即
int (*p)[5];
p=a;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p=*a这样才行。P指针是指向地址的 a是二维数组是不可以直接付给p的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
拜托。p是指针,而且a还是二维数组怎么能相等
追问
p代表的是&p[0]对吧,a代表&a[0],为什么p[0]=a[0]没问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询