9个回答
展开全部
先上结论:
对于int a[5],*p;
p=a; 或p=&a[0]是正确的
p=&a严格来说是错误的
首先要搞清楚a与&a的区别:a表示数组首元素的首地址,即元素a[0]的地址;&a表示整个数组的地址。二者的值是相同的,但意义并不一样。正如成都市政府与四川省政府的地址都在成都,但二者表示的含义不同。
如下图所示,a表示a[0]的地址
&a则表示整个数组的地址
二者的值之所以相同,因为地址是取自第一个字节的地址,数组元素a[0]的第一个字节与整个数组的第一个字节显然是相同的。
a与&a[0]及&a的值如下:
1244980,1244980,1244980
a+1与&a[0]+1值如下:
1244984,1244984
但&a+1的值为1245000。
a+1与&a[0]+1都是表示下一个数组元素的地址,以元素为单位相加,地址值+4。而&a+1表示下一个数组的地址,以数组为单位相加,地址值+20.
所以,p=a; 或p=&a[0]是正确的,表示指针p指向数组的首元素。
展开全部
有了int a[5],*p;,p=&a;显然就是错误的。int a[5],*p;说明了a和p都是int *型指针,只是a是常指针,p是指针变量,那么p=a;就合情合理;&a是指向a[5]的指针,与它类型匹配的是int (*)[5],而不是int *。所以p=&a;的等号两边类型不匹配,编译都过不了……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.int a[10],*p;
p=a;//a是首地址
2.int a[10],*p=a;//定义时赋值
3.int a[10],*p;
p=&a[0];
以上都是等效的,没有p=&a的
谭浩强是说前者对
p=a;//a是首地址
2.int a[10],*p=a;//定义时赋值
3.int a[10],*p;
p=&a[0];
以上都是等效的,没有p=&a的
谭浩强是说前者对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p=&a,是把a的地址赋给p,再通过*p得到a所赋给p的地址,取a里面的内容 ,对于数组的话好像两个都对的,我用VC6.0编译的时候都通过的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不要太相信书上写的话了,遇到问题最好的办法是动手试一试
听过的会忘记,看过的只能记住,只有做过的才能理解
听过的会忘记,看过的只能记住,只有做过的才能理解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询