鱼C论坛

 找回密码
 立即注册
查看: 861|回复: 1

[已解决]C语言!简单问题求助

[复制链接]
发表于 2021-1-30 21:43:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
main()
{
        int j=5,q;
        q=(++j)+(++j)+(++j);
        printf("%d",q);
}

为什么不是6+7+8呢?而是结果为22呢?
最佳答案
2021-1-31 11:26:30
懒得再写了,直接给你看一下之前写的答案吧
不要纠结这个了。这个问题本身其实就有问题。了解++i和i++的一些区别即可,不要深究这个本身就有问题的问题了。
这个其实两个都对。只是编译器不一样而已。
书上的这个结果应该是早些年的VC6.0或者TC编译器运行的结果。
      (i++)+(i++)+(i++)整个表达式的运算都在i自加之前完成,所以得到的结果是5+5+5=15,然后在对i进行三次自加。
      (++j)+(++j)+(++j)整个表达式在j自加完成之后运算,所以j先自加3次,得到8,然后在进行求和,得到8+8+8=24


而现在的大部分编译器不这么认为。
       (i++)+(i++)+(i++),自加和求和都是逐步进行的,多项求和从左向右逐步求和,所以先计算(i++)+(i++),第一个括号内是i++,所以先取值,再自加,然后第二个内是i++,所以也是先取值,再自加,这样得到的是5+6=11,i自加了两次为7,然后在和最后一部分求和11+(i++),依然是先取值再自加,得到的是11+7=18,i自加为8
      (++j)+(++j)+(++j),同样是逐步求和,只不过是先自加再求和,计算(++j)+(++j),先对j进行两次自加得到j=7,然后求和,7+7=14,再计算下一步求和14+(++j),依然是先自加再求和,j自加为8,求和14+8=22

若真要再深究的话,i++有临时变量产生,参与运算的是临时变量,因此这个表达式不能作为左值出现,运行效率低一些;++i是对自身的操作,可以作为左值出现,没有中间临时变量,运行效率高一些。

自己编程尽量不要用一个表达式中连续自加的情况,在不同的编译器下回出现各种问题。一般在一个表达式中一个变量只有一次自加,不易出错,++在前先自加,++在后先用值。
如今新的编程语言中怕出现这个问题,根本没有自加运算符了,例如python中就没有自加运算符


原来帖子的位置



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-31 11:26:30 | 显示全部楼层    本楼为最佳答案   
懒得再写了,直接给你看一下之前写的答案吧
不要纠结这个了。这个问题本身其实就有问题。了解++i和i++的一些区别即可,不要深究这个本身就有问题的问题了。
这个其实两个都对。只是编译器不一样而已。
书上的这个结果应该是早些年的VC6.0或者TC编译器运行的结果。
      (i++)+(i++)+(i++)整个表达式的运算都在i自加之前完成,所以得到的结果是5+5+5=15,然后在对i进行三次自加。
      (++j)+(++j)+(++j)整个表达式在j自加完成之后运算,所以j先自加3次,得到8,然后在进行求和,得到8+8+8=24


而现在的大部分编译器不这么认为。
       (i++)+(i++)+(i++),自加和求和都是逐步进行的,多项求和从左向右逐步求和,所以先计算(i++)+(i++),第一个括号内是i++,所以先取值,再自加,然后第二个内是i++,所以也是先取值,再自加,这样得到的是5+6=11,i自加了两次为7,然后在和最后一部分求和11+(i++),依然是先取值再自加,得到的是11+7=18,i自加为8
      (++j)+(++j)+(++j),同样是逐步求和,只不过是先自加再求和,计算(++j)+(++j),先对j进行两次自加得到j=7,然后求和,7+7=14,再计算下一步求和14+(++j),依然是先自加再求和,j自加为8,求和14+8=22

若真要再深究的话,i++有临时变量产生,参与运算的是临时变量,因此这个表达式不能作为左值出现,运行效率低一些;++i是对自身的操作,可以作为左值出现,没有中间临时变量,运行效率高一些。

自己编程尽量不要用一个表达式中连续自加的情况,在不同的编译器下回出现各种问题。一般在一个表达式中一个变量只有一次自加,不易出错,++在前先自加,++在后先用值。
如今新的编程语言中怕出现这个问题,根本没有自加运算符了,例如python中就没有自加运算符


原来帖子的位置



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 00:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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