c primer plus 294页

马振宇 2019-08-21 07:29:41
total+=*start++ 一元运算符*和++优先级相同,但结合律从右至左,所以start++先求值,然后才是*start。也就是说,指针start先递增后指向,使用后缀形式(即start++而不是++start)意味着先把指针指向位置上的值加到total上,然后再递增指针。如果使用*++start,顺序则反过来,先递增指针,再使用指针指向位置上的值。如果使用(*start)++,则先使用start指向位置上的值,再递增该值,而不是递增指针。这样,指针将一直指向同一个位置,但是该位置上的值发生了变化。虽然*start++比较常用,但是*(start++)这样写更清楚。 问题:感觉第一个句号前面说的和后面的意思不一致啊,哪位大神能给解释一下(我理解第一句话的意思是先start+1,然后*(start+1),然后再加到total上),这和后面说的不一样啊?迷糊了。
...全文
77 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
马振宇 2019-08-26
  • 打赏
  • 举报
回复
引用 3 楼 SuperDay 的回复:
又看到楼主的帖子,还没搞明白呀? 结合性指的是,在一个表达式里面的优先结合次序,就像楼主所说的,*和++的 优先级是一样的,那么这时候就需要结合性了判断一个表达式是如何进行运算的。 楼主所说的*start++这个表达式,它到底指的是*(start++)还是(*start)++,这就是由结合性来决定的,因为++这个操作符是从右至左的,那么它就是表示*(start++)。但因为start++这个表达式的值是start,所以这个表达式的取值就是*start,从而total+=*start++,就相当于是total+=*start之后start++。结合性指的是操作符的结合次序,并不是运算的次序,就是说,total+=*start++不是start++之后再total+=*start 同样的,因为++start表达式的值是start+1,所以total+=*++start就相当于total+=*(start+1)之后再start++ 不知道我说的你明白了吗?
明白了,谢谢你
铖邑 2019-08-25
  • 打赏
  • 举报
回复
又看到楼主的帖子,还没搞明白呀? 结合性指的是,在一个表达式里面的优先结合次序,就像楼主所说的,*和++的 优先级是一样的,那么这时候就需要结合性了判断一个表达式是如何进行运算的。 楼主所说的*start++这个表达式,它到底指的是*(start++)还是(*start)++,这就是由结合性来决定的,因为++这个操作符是从右至左的,那么它就是表示*(start++)。但因为start++这个表达式的值是start,所以这个表达式的取值就是*start,从而total+=*start++,就相当于是total+=*start之后start++。结合性指的是操作符的结合次序,并不是运算的次序,就是说,total+=*start++不是start++之后再total+=*start 同样的,因为++start表达式的值是start+1,所以total+=*++start就相当于total+=*(start+1)之后再start++ 不知道我说的你明白了吗?
铖邑 2019-08-25
  • 打赏
  • 举报
回复
start++表达式的值是start,++start表达式的值是start+1
马振宇 2019-08-25
  • 打赏
  • 举报
回复
有人回答吗?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧