问题 单项选择题

有以下语句: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是错误的。

单项选择题
选择题