求解此C语言题目 谢谢大家 高分悬赏 要分析过程

已有C语句“int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;”,下列数组元素引用错误
的是
A.a[p-a] B.*(&a[2])
C.p[2] D.*(*(a+2))

首先将*p定义为指向a的指针,那么指向第一个元素0。
对A:a[p-a],a代表数组的首地址,和p相同,所以相当于a[0],正确
对B;a[2]是第三个元素,先对其取地址,然后再用*求地址里的内容,结果仍为a[2],正确
C:p[2],其实就是相当于P向右移动两位,指向第三个元素。正确
D:(a+2),此时是第三个元素的地址。然后*(a+2),此时即可引用第一个元素。再加一个*显然是多余。。。
所以答案是D
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-26
ABC都可以
D错误
A是说先求p的指针在a后多少个位置,事实上是0,所以输出是a[0]
B是说取a[2]的位置,再取这个位置上的内容,事实上就是a[2]
C是说从p指的位置向后两个位置(p也是整型的指针),也就是a[2]
D是说a向后两个位置,这个位置上的内容作为指针,所以指针指向的是2,所以2的位置上是保护区域……所以是不对的,而且int不能做指针的结果
第2个回答  2013-03-26
答案为D p是地址 a是数组的首地址 A答案 表示的是a[0] B 答案 表示的是先取a[2]的地址 然后再通过a[2]的地址去取出地址空间中的数据 也就是a[2]的值 C p[2]是a 向右移动两个等于a[2] D 答案 *(a+2)表示的是a[2]的内容 再加个星号 就不对了 望采纳 纯手打本回答被提问者采纳
第3个回答  2013-03-26
A是对的,p和a储存的都是地址,两个相同的地址做减法结果就是0.也就是a[0]了。
B是对的,&a[2]先去a数组第三个元素的地址,再用* 取地址所存的内容。
C是对的,P[2]代表*(p+2),就跟a[2]一个意思。
D是错的。。。吧。。*(a+2)也就是a[2],再用个*号是神马意思啊,。。。
第4个回答  2013-03-26
D是错的,题目上定义了*p=a,那么
选项A实际上就是a[0];
选项B是选取a[2]地址,再得到a[2]也就是2;
选项C还是a[2];
相似回答