问题
单项选择题
有以下语句:int a[10]=0,1,2,3,4,5,6,7,8,9, *p=a;。下列对a数组元素的引用 (其中0≤i<10)不正确的是( )。
A.a[p-a]
B.P[i]
C.*(&a[i])
D.*( *(a+i))
答案
参考答案:D
解析: 选项A中,p为指针,数组名a代表数组的首地址,所以p-a就是指针到数组首地址的偏移量。选项B中,p[i]等价于a[i]。选项C中,&a[i]是取数组a中第i个元素的地址,而对于*(&a[i]),由指针运算符“*”的运算规则可知,语句*(&a[i])就是返回地址&a[i]中存敢的值,即a[i]。选项D是以指针形式对数组元素进行引用,由于a代表数组的首地址,所以 a引代表第i+1个元素的地址,*(a+i)就是该数组元素的值,再对这个值作取内容操作是非法的,所以选项D是错误的。