一个关于C语言的疑问,求详解,谢谢!

若有说明 int i=2,a[10]={2,4,6,8,10,12,14,16};对元素a[i]的不正确引用是__.
A. *(a+i) B.a[i] C.*a+i D.*(&a[i])
答案选C。请问回答这道题是用到了:对数组元素的引用应有两种形式,一是a[i]二是*(p+i)或者*(a+i)(其中赋初值p=a)这个知识点吗?如果是,请问D怎么对了?如果不是,请问应该怎么解答,用什么知识点?谢谢!

“&”是取地址运算符,所以&a[i]的意思是取了元素a[i]的地址;而“*”是取内容运算符,所以对刚才求得的地址再取一次内容,这样元素a[i]就被取出来了。C选项应该写成A选项那样,因为a是首地址,所以a+i就是元素a[i]的地址,用取内容运算符“*”,就把相应地址中的内容取出来了,所以a+i应该写括号,像A选项那样。

参考资料:《C语言程序设计》

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-16
*(取地址所含的内容)与&(取地址)可以说是相反的作用,可以相互抵消,所以D选项就是a[i],肯定是对的。
相似回答