C语言中自增符++优先级及内存中运行方式?先自增还是先计算再自增?

随心无羁 2014-03-04 12:57:44
近在讨论一个问题,引出来这个。
比如 i = j + k++;这里边的k++的运行顺序是什么?经常说这一种是先求和再自增,但是++的优先级明明高于+,不是先算k++吗?所以有人提出k++和++k优先级是不一样的。但是++作为运算符,优先级应该不会因为放在那里就改变。所以,简单编译了一下,在汇编中貌似还是先算k++,但是把k,和k++都放在寄存器中,用的时候先用了k。(不知道理解对不对)。这样来说,还是先自增,再计算,不过没用自增的值而已。
总结一下:
1.k++和++k中优先级,有没有区别?
2.在内存计算时候,先自增还是先计算再自增?
...全文
523 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nadleeh 2014-03-04
  • 打赏
  • 举报
回复
引用 楼主 u010450836 的回复:
近在讨论一个问题,引出来这个。 比如 i = j + k++;这里边的k++的运行顺序是什么?经常说这一种是先求和再自增,但是++的优先级明明高于+,不是先算k++吗?所以有人提出k++和++k优先级是不一样的。但是++作为运算符,优先级应该不会因为放在那里就改变。所以,简单编译了一下,在汇编中貌似还是先算k++,但是把k,和k++都放在寄存器中,用的时候先用了k。(不知道理解对不对)。这样来说,还是先自增,再计算,不过没用自增的值而已。 总结一下: 1.k++和++k中优先级,有没有区别? 2.在内存计算时候,先自增还是先计算再自增?
把谭大爷的书扔掉,再去看顶置贴
richyhuang 2014-03-04
  • 打赏
  • 举报
回复
最好不会产生歧义的编程方式,尽量不依赖默认的优先级 不知道楼主要实现什么目的 如果是加2,就k+=2;
lin5161678 2014-03-04
  • 打赏
  • 举报
回复
先算 k++ 但是 k++ 算的结果是k啊 k的值是k+1 但那是k的值 别混淆了 表达式的值 和 操作数的值
你怎么了熊吉 2014-03-04
  • 打赏
  • 举报
回复
引用 5 楼 a345485527 的回复:
这个不是置顶帖的内容么
这个跟置顶两回事 这个式子的结果有明确定义
Pump天天学习 2014-03-04
  • 打赏
  • 举报
回复
这个不是置顶帖的内容么
你怎么了熊吉 2014-03-04
  • 打赏
  • 举报
回复
i = j + k++ 假设k=3,j=2 ++优先级最高,首先计算k++,此时k=4,但(k++)这个表达式的返回值是3,所以第二步是计算j+3,这个表达式不改变j的值,仍为2,但返回值是5,第三步计算i=5,这个表达式改变i的值,i变为5,而表达式的返回值是i的引用 一句话,就是分清楚运算符的参数和运算符的返回值的区别 如果把k++写成一个函数,你就不会有此困惑 int jiajia(int& k) { k++; return 原来的k; } i = j + jiajia(k)
羽飞 2014-03-04
  • 打赏
  • 举报
回复
不好意思,++k和k++的优先级是不同的 k++的优先级更高
图灵狗 2014-03-04
  • 打赏
  • 举报
回复
参考http://bbs.csdn.net/topics/370153775
引用 楼主 u010450836 的回复:
近在讨论一个问题,引出来这个。 比如 i = j + k++;这里边的k++的运行顺序是什么?经常说这一种是先求和再自增,但是++的优先级明明高于+,不是先算k++吗?所以有人提出k++和++k优先级是不一样的。但是++作为运算符,优先级应该不会因为放在那里就改变。所以,简单编译了一下,在汇编中貌似还是先算k++,但是把k,和k++都放在寄存器中,用的时候先用了k。(不知道理解对不对)。这样来说,还是先自增,再计算,不过没用自增的值而已。 总结一下: 1.k++和++k中优先级,有没有区别? 2.在内存计算时候,先自增还是先计算再自增?
羽飞 2014-03-04
  • 打赏
  • 举报
回复
1. 优先级是相同的 2. 这个计算的过程,编译器可以自己定,就是说这样写,得出来的结果是依赖于编译器的

70,005

社区成员

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

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