C语言里的单目运算符 表达式-i++ 和*p++ 单目运算符结合顺序是从右向左的,为什么第一个表达式可以换为

-(i++)而第二个却要转换为(*p)++,请高手详细解答下。从右向左结合,到底是以什么为准,怎么个从右向左结合第二个写错了,应该是-i++转换成-(i++)就可以,而*... -(i++) 而第二个却要转换为(*p)++,请高手详细解答下。
从右向左结合,到底是以什么为准,怎么个从右向左结合
第二个写错了,应该是 -i++转换成-(i++)就可以,而*p++ 却要先算*p 然后p++
为什么不能转换成*(p++)和i的那个一致呢
展开
 我来答
少年游h
2012-05-06 · TA获得超过1503个赞
知道小有建树答主
回答量:509
采纳率:0%
帮助的人:407万
展开全部
所谓的结合行,是在优先级相同的情况下才自由向左(或者自左向右的),在单目运算里面++比-和*优先级都要高。你列的式子里,第一个是对的,第二个应该是*p++就等于*(p++),相当于取p所指地址的内容,然后p自增,增加的大小等于所指类型的字节数
追问
第一个是对的,但是第二个 *p++ 就是先让p和*结合 然后p和++结合,代码运行了,你说错了,我不明白的是 为什么他不能和第一个一样像i 先和++结合,然后算负号
追答
我没说错啊,给你看一下我运行的情况吧。
printf里的参数是从右向左计算的,所以先算(*p)++,即返回a[0]的值,然后将a[0]自增;然后再算*p++,此表达式先算p++,返回当前p值,再将p自增,所以这里等于取的当前a[0]的值;最后*p就取的a[1]的值。
weixyc
2012-05-06 · TA获得超过1129个赞
知道小有建树答主
回答量:763
采纳率:100%
帮助的人:491万
展开全部
楼上两位说的不全对
应该这样说
- 与++级别一样,所以从右向左但i位于++前面应该先使用i 再++所以i 要进行-运算后再自增
所以应该是这样(-i)++,所以你第一个是错的
* 比++级别一样,所以也从右向左,但p是在++前面,所以要先使用p再自增,
所以就先使用p进行*运算后再自增 ,第二个是对的
追问
所以应该是这样(-i)++ ,照你说 假如i的值是3  那么最后结果就是-4,你才错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦起ll
2012-05-06
知道答主
回答量:56
采纳率:0%
帮助的人:53.5万
展开全部
后缀++的优先级大于-(负号)
-和*(取指针值)的 优先级是一样的
所以 *p++和(*p)++是不一样的,看你要达到什么目的
另外-是右结合的,*,后缀的++都是左结合的即从左向右
更多追问追答
追问
他们都是单目运算符,优先级是一样的
追答
你看看c primer plus就知道了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式