问题 单项选择题

若有以下C语言定义和语句,且0≤i<10,则对数组元素的错误引用是______。
int a[i]=1,2,3,4,5,6,7,8,9,0,*p,i;
p=a;

A.(a+i)
B.p+I
C.a[p-a]
D.*(&a[i])

答案

参考答案:B

解析: 由于C语言规定数组名代表数组中第一个元素的地址,因此选项A的*(a+i)与a[i]等价。
由于指针变量p的初值为数组a的首地址,即p指向a,因此p-a的结果为0,选项C的a[p-a]相当于a[0]。
对于选项D,&a[i]代表a[i]的地址,所以*(&a[i])表示该地址所指向的变量a[i]。因此选项A、C和D都能实现对数组a中元素的正确引用。
对于选项B,指针变量p指向数组a的首地址,与整数值i相加后,结果仍是地址值,它表示数组a中的第i个元素的地址,显然这不是对数组元素的正确引用。

单项选择题
选择题