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

随心无羁 2014-03-04 12:57:44
近在讨论一个问题,引出来这个。
比如 i = j + k++;这里边的k++的运行顺序是什么?经常说这一种是先求和再自增,但是++的优先级明明高于+,不是先算k++吗?所以有人提出k++和++k优先级是不一样的。但是++作为运算符,优先级应该不会因为放在那里就改变。所以,简单编译了一下,在汇编中貌似还是先算k++,但是把k,和k++都放在寄存器中,用的时候先用了k。(不知道理解对不对)。这样来说,还是先自增,再计算,不过没用自增的值而已。
总结一下:
1.k++和++k中优先级,有没有区别?
2.在内存计算时候,先自增还是先计算再自增?
...全文
441 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. 这个计算的过程,编译器可以自己定,就是说这样写,得出来的结果是依赖于编译器的
1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成型C项目、C游戏的水平;2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存的存储、内存块分配、static、字函数和字串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

69,393

社区成员

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

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