C语言int a[5],*p; p=a;和p=&a;的对错问题~希望详细点,谢谢啦
答案:6 悬赏:80 手机版
解决时间 2021-03-20 03:42
- 提问者网友:喧嚣尘世
- 2021-03-19 04:33
谭说前者错的……不理解…………
最佳答案
- 五星知识达人网友:等灯
- 2021-03-19 05:47
有了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楼网友:青灯有味
- 2021-03-19 10:57
不要太相信书上写的话了,遇到问题最好的办法是动手试一试
听过的会忘记,看过的只能记住,只有做过的才能理解
- 2楼网友:天凉才是好个秋
- 2021-03-19 09:51
前者是对的,逻辑上两个都是对的,p指向a的地址,a和&a都表示数组地址(数组特有)
怀疑后一个可能编译不过
- 3楼网友:由着我着迷
- 2021-03-19 09:12
p=&a,是把a的地址赋给p,再通过*p得到a所赋给p的地址,取a里面的内容 ,对于数组的话好像两个都对的,我用VC6.0编译的时候都通过的
- 4楼网友:野味小生
- 2021-03-19 08:04
1.int a[10],*p;
p=a;//a是首地址
2.int a[10],*p=a;//定义时赋值
3.int a[10],*p;
p=&a[0];
以上都是等效的,没有p=&a的
谭浩强是说前者对
- 5楼网友:笑迎怀羞
- 2021-03-19 07:17
先上结论:
对于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指向数组的首元素。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯