鱼C论坛

 找回密码
 立即注册
查看: 5052|回复: 6

C语言编程求帮助

[复制链接]
发表于 2013-1-7 14:54:15 | 显示全部楼层 |阅读模式
1鱼币
  1. #include <stdio.h>

  2. void main()
  3. {
  4.         int i = 5, j = 5, p, q;
  5.         p = i+++i+++i++;
  6.         q = (++j)+(++j)+(++j);
  7.     printf("%d, %d, %d, %d", p, q, i, j);
  8. }
复制代码
这个代码中q的值为啥我编完显示是22啊? 不是6+7+8=21吗?

最佳答案

查看完整内容

这道题 我记得小甲鱼 零基础汇编 最开始的某个视频讲过,这个是坑爹的编译器经过了自动优化处理。 有些编译器 比如我用的是vs2012 上述答案会变成24,也就是说三次自加j等于8 看做一个整体。8+8+8.而你这个应该可能就是上面人所说的 编译器 是按照7+7+8来进行优化的
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-7 14:54:16 | 显示全部楼层
这道题 我记得小甲鱼 零基础汇编 最开始的某个视频讲过,这个是坑爹的编译器经过了自动优化处理。
有些编译器 比如我用的是vs2012 上述答案会变成24,也就是说三次自加j等于8 看做一个整体。8+8+8.而你这个应该可能就是上面人所说的 编译器 是按照7+7+8来进行优化的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-7 15:46:56 | 显示全部楼层
本帖最后由 寒月独狼 于 2013-1-7 16:07 编辑

这就是j++与++j的不同,因为前者是先判断再执行,后者是先执行再判断。按照此理, q = (++j)+(++j)+(++j);j最后一次的结果是9,不是8。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-7 17:10:07 | 显示全部楼层
结果当然是22,从左到右运算啊,先算前两个加数的和,再和第三个相加。 => (++j)+(++j)=7+7=14 => 14+(++i)=22(此时的i加为8)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-7 18:36:52 | 显示全部楼层

不过最后输出的结果里j是8啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-9 11:38:42 | 显示全部楼层
....看错了吧    =  =应该就是 21啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-9 15:42:34 | 显示全部楼层
EverLyn 发表于 2013-1-7 14:54
这道题 我记得小甲鱼 零基础汇编 最开始的某个视频讲过,这个是坑爹的编译器经过了自动优化处理。
有些编译 ...

SO GA 就是鱼哥的视频里的 我得这个结果就郁闷了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-9 12:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表