设有以下语句,则()不是对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数组元素的正确引用。
int
a[10]={0,1,2,3,4,5,6,7,8,9},
*p=a;
相当于
int
a[10]={0,1,2,3,4,5,6,7,8,9};
int
*p;//定义p为执行int的指针变量
p
=
a;
//a为数组名,代表数组的起始地址
A、p的值是一个地址(数组a的起始地址),所以p-a
=
0,那么a[p-a]相当于a[0]
B、a[i]是数组的一个元素,&a[i]是数组的元素的地址,*(&a[i])相当于a[i]
C、p[i]
<=>
*(p+i),
p+i的结果是一个地址,*(p+i)就是对数组中下标为i的元素的访问
D、a+i的值是一个地址,*(a+i)<=>a[i],也就是说表达式*(a+i)的值是一个整数,在表达式*(*(a+i))中,最左边的*,相当于是对一个整数进行解引用,所以是非法的。
温馨提示:答案为网友推荐,仅供参考
相似回答