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