问题 单项选择题

设有以下语句,对a数组元素的引用中(其中0<=i<10),不正确的是( )。
int a[10]=0,1,2,3,4,5,6,7,8,9),*p=a;

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

答案

参考答案:D

解析: 选项A中,p为指针,数组名a代表数组的首地址,所以p-a就是指针到数组首地址的偏移量。
选项B中,&a[i]是取数组a中第i个元素的地址,而对于*(&a[i]),由指针运算符*的运算规则可知,语句“*(&a[i])”就是返回地址&a[i]空间中存放的值,也即a[i]选项C,由于指针p已指向数组a,所以p[i]就等于a[i]。这是常用的一种数组元素引用方式。
选项D是以指针方式对数组元素进行引用,由于a只是代表数组的首地址,并不是指针,所以表达式*(*(a+i)是错误的,正确的引用应该为:*(*(p+i)。

选择题
多项选择题