鱼C论坛

 找回密码
 立即注册
查看: 2890|回复: 7

这个自己增有点怪望高手指点

[复制链接]
发表于 2012-3-20 18:55:13 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>
void main()
{
int j=5,q;
   
q=(++j)+(++j)+(++j)+(++j)+(++j);
printf("%d,%d\n",q,j);
}
上面我一个一个的试了,问题在第一个++J的值是6,q=6
然后问题在二个++J相加时q=14,J=7,
这个J=7是没错,但是这个q的值是不是有问题了,q=(1+5)+(1+(1+5))这个值我想好像是13吧难道我小学没读好

最佳答案

查看完整内容

在同一个句子里面不要使用这么多的自增和自减,前缀自增就是先+1后执行,后缀自增就是先执行后+1,至于判定的地方,一般是在一个表达式后面的逗号或者是分号后面执行后缀自增。但是有的地方说不清楚,不同的系统和不同的编译器都不好说。 至于本体里面,q的值其实很不确定,我的系统用vc++6.0算出来的是22,但是有的可能是21,甚至24。在同一个语句里面预算一个变量两次自增以上就不好确定值了,因为你不知道系统是从左到右运算还 ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-20 18:55:14 | 显示全部楼层
在同一个句子里面不要使用这么多的自增和自减,前缀自增就是先+1后执行,后缀自增就是先执行后+1,至于判定的地方,一般是在一个表达式后面的逗号或者是分号后面执行后缀自增。但是有的地方说不清楚,不同的系统和不同的编译器都不好说。
至于本体里面,q的值其实很不确定,我的系统用vc++6.0算出来的是22,但是有的可能是21,甚至24。在同一个语句里面预算一个变量两次自增以上就不好确定值了,因为你不知道系统是从左到右运算还是从右向左运算。
楼主尽量不要用这种方法。

小甲鱼在视频上面说了,是编译器的问题。也希望大家不要那样用,在不同的编译器上面会有不同的结果。一个语句里面使用一个变量的多次自增自减,可读性差,而且还容易出错
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-20 19:16:25 | 显示全部楼层
去学零 基础汇编,然后反汇编,就知道怎么回事了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-21 00:51:54 | 显示全部楼层
不要去要就这样的程序,没人会写这样的程序。不同编译器的结果是不同的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-21 12:41:43 | 显示全部楼层
编译器搞得鬼,不用管他,有时候编译器优化会把前几个J自增完后再加。我大学教授以前说过这个问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-21 13:14:01 | 显示全部楼层
额,不要在纠结这个问题了,编译器VC++6.0自动优化的缘故,
先运算前两个++求出i的值,此时j=7,然后在进行运算,
即7+7+8+9+10=41
而不是你想的6+7+8+9+10=41;
可以用(++j)+(++j)试试,其结果为7+7,即14.
一般情况下不会用到这种语句的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-22 00:13:09 | 显示全部楼层
小甲鱼,视频上讲的很清楚了,是编译器的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-22 14:08:04 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-12 05:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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