int k,a[10],*p1=*p2=a;以下语句不正确的是A.k=*p1+p2

int k,a[10],*p1=*p2=a;以下语句不正确的是A.k=*p1+p2 B.k=*p1*(*p2) C.p2=k D.p1=p2 怎么做,求解释

int k,a[10],*p1=*p2=a
定义的一个无初值的k 定义了一个10个元素的整型数组a,定义了2个指针p1,p2分别指向a数组首地址
A. k=*p1+p2 右边相当于指针p2+数值 也就是p2指向的地址偏移 返回的还是地址。把地址赋值给整型变量 报错
B.k=*p1*(*p2) 右边*p1 *p2都是指向地址的值 相当于 数值*数值 返回还是数值,所以赋值成立
C.p2=k 指针本身其实也是变量,只不过指针里存储的数值代表的是地址。而这里把k的值赋值给了p2, 这样不报错,但p2里的值就不是有效的地址,p2也就失去指针的意义
D.p1=p2 都是指针,没问题
所以选A追问

可答案是C啊

A我打错了,是k=*p1+*p2.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-02
看谁都对,哈哈,p2应该能加*p1吧,最后得出a[*p1]的地址,取值有可能越界而已。
c的语句也可以通过吧,随便赋值给p2一个地址,有可能出现该内存不能为read或write的错误,但语句应该可以这么用