设有以下语句,则( )是对数组元素的不正确引用,其中.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))
A. a[p-a]:这是正确的引用。p是指向数组a的指针,p-a计算出p和a之间的距离,即p指向数组中的哪个元素。因此,a[p-a]等价于*p,即p指向的元素。
a[p-a]
p
a
p-a
*p
B. *(&a[i]):这也是正确的引用。&a[i]是取数组a第i个元素的地址,*是解引用操作符,所以*(&a[i])等价于a[i],即数组a的第i个元素。
*(&a[i])
&a[i]
i
*
a[i]
C. p[i]:这也是正确的引用。因为p是指向数组a的指针,p[i]等价于*(p+i),即指针p加上偏移量i所指向的元素。
p[i]
*(p+i)
D. *(*(a+i)):这是不正确的引用。a+i是数组a的第i个元素的地址,*(a+i)是取该地址处的值,即数组a的第i个元素。但是*(*(a+i))相当于再次对*(a+i)进行解引用,这在C语言中是不合法的,因为*(a+i)已经是一个值,而不是一个地址。
*(*(a+i))
a+i
*(a+i)
蹲一个B的解释
eeexlie 回复 蔡瑾熙: 括号内部取地址,然后*根据地址取值
A为什么是对的,不懂
快乐小土狗 回复 19137430266: p-a 计算的是 p 指针和数组首地址 a 之间的差值,结果为0(因为p指向a的第一个元素)。所以,a[p-a] 实际上就是 a[0],这是一个正确的引用。
19137430266 回复 19137430266: 明白了,感谢
为啥c正确?p是数组?
19568276867 回复 985872599: 书上有说明可以这样写
对整数进行解引用非法
D
用户登录可进行刷题及查看答案
登录后提交答案