c语言指针问题。 若有int a[]={0,1,2,3,4,5,6,7,8,9,0},*p=a,i

c语言指针问题。
若有int a[]={0,1,2,3,4,5,6,7,8,9,0},*p=a,i;
则引用错误的是
A. A[p-a]
B. *(&a[i])
C. p[i]
D. *(*(a+i))
能不能分别解释一下4个选项?(A选项的方括号前是大写的A)

    A. a[p-a]     p=a,p-a=0,这里就是引用 a[0]
    B. *(&a[i])   &a[i]表示取第i+1个元素的地址, *地址,表示引用地址中的数据,这里就是引用a[i]
    C. p[i]         p是指针,地址,可以用数组元素引用方式来引用数组元素。p[i]就是a[i]
    D. *(*(a+i))  a+i是第i+1个元素的地址,*(a+i)是引用地址中的数据,是个整数,*整数,是错误的引用方式,会引起程序异常。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-11-19
首先说,i是初始化了的。
p的地址就是a的地址,p-a=0,没问题
&a[i]代表&a[i]的地址,加上*代表存放的数,也就是a[i],没问题
p[i]意思就是a[i],没问题
a是a[0]的地址,*(a+i)指向a[i],再加*就不知道指到哪里去了,因为a[i]不是地址
相似回答