C语言:若指针P已正确定义并指向a[1]=20.则执行语句*p++,*++p,++*p后的值分别是30,30,21.为什么??

求详细,精确解释…... 求详细,精确解释… 展开
 我来答
眼眶的湿润
推荐于2018-04-13 · TA获得超过3279个赞
知道小有建树答主
回答量:806
采纳率:50%
帮助的人:569万
展开全部
a[2]应该是等于30吧?

*p++,*++p 由于结合顺序的关系,都是先执行p自加1,也就是指向地址往后移一单位的操作,所以p都指向了a[2],再用*指针运算符取得地址里的值,也就30,所以前2个结果都是30.

++*p 此时++是对于*p进行的操作,也就是对a[1]自加1,所以结果是21

希望对你有帮助,望采纳谢谢。
aven_yang
2013-04-01 · TA获得超过719个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:309万
展开全部
根据你的结果可以知道你的a[2]=30; 以下是解析:
*p++ 由结合性的优先级 相当于*(p++); p++表示将p的地址向下移,这时p=&a[2]也就是p指向了a[2]的地址,*p表示取出a[2]的值为30.
*++p 相当于*(++p),++p也表示将p的地址向下移,这时p=&a[2]也就是p指向了a[2]的地址,*p表示取出a[2]的值为30.
而++*p 相当于++(*p) ,这就表示先将p指向的地址的值拿出来也就是a[1]的值为20,再++,就相当于
20+1=21
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-02
展开全部
*p++,*是指针指向往后+1的地址取值,指针先进行p++或++p再取值,明显数组只有1个数值a[1]=20,再往后就没有了,运行出来是一个随机数,而,++*p是指针p指向数组a[1]=20的值再自增1。注意*p++,*++p,++*p之间的区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式