鱼C论坛

 找回密码
 立即注册
查看: 2148|回复: 12

关于C语言教程里的一个例题结果

[复制链接]
发表于 2013-8-21 22:45:58 | 显示全部楼层 |阅读模式
1鱼币
各位老师好!
     我是个菜鸟,正在努力学习小甲鱼老师的C语言教程。听到i++和i--这一课。有个例题做不明白,请老师们指点下。
程序如下:

#include <stdio.h>

void main()
{
        int i=5,j=5,p,q;
        p=(i++) + (i++)+ (i++);
        q=(++j) + (++j)+ (++j);
        printf("%d,%d,%d,%d\n",p,q,i,j);
}


根据运算符优先顺序,先计算( )内的变量。则p的值为5+5+5=15,i最终等于8,i先取值,后自增1
                                                                      q的值为6+7+8=21,j最终等于8。j先自增1,后取值

问题来了,可是为什么我运行程序后的结果q的值等于22呢?不知道哪里错了,请老师指点下菜鸟。谢谢!!

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

使用道具 举报

发表于 2013-8-21 23:04:47 | 显示全部楼层
本帖最后由 565123 于 2013-8-21 23:07 编辑

vc6不符合C标准,建议使用vs2005以后的编译器
其他编译器运行结果为15,24

5+5+5

8+8+8

不要纠结这个问题,因为以后不会用到,有++或--的表达式通常都单独写,不会混在一起
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-22 01:43:09 | 显示全部楼层
ass.png
楼主请看 vs2012的汇编代码。结果很明显了。

顺便说一句,像这种问题就不要研究了,平台相关的。如果想明白结果为啥是这样活着那样。
那么请从汇编角度看问题。一切自然很明了了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-22 09:24:41 | 显示全部楼层
3楼说的没错,在小甲鱼的汇编程序中也有讲过这个难题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-22 09:47:55 | 显示全部楼层
三楼正解啊 这玩意真心不用纠结的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-22 11:43:46 | 显示全部楼层
:ton:本来也有纠结这个问题,现在看来可以不用管了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-22 12:53:15 | 显示全部楼层

你好  虽然这个和平台相关但是我还是对这个编译器有疑问 无标题.png
                             图1-1
这个可以看到是 先 i+i+i 在进行 三次i+1操作,那为什吗?在进行下面操作的时候,要先
1、i+1、i+1  放到 i 里面
2、i+i 放到 eax寄存器里面
3、i+1 放到 i 里面
4、eax +i 放到 i 里面 这样操作
根据上面的图1-1为什么不,先进行三次i+1操作在进行i+i操作,
可能问的有点关于编译器的编写规则了,但是这也是有道理才这样设计的吧,不会是随便来的吧?
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-22 12:54:54 | 显示全部楼层
各位老师好!
非常感谢你们的回答,我理解了。以后遇到++或--这样的表达式单独写。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-22 13:52:12 | 显示全部楼层
佐少love 发表于 2013-8-22 12:53
你好  虽然这个和平台相关但是我还是对这个编译器有疑问
                             图1-1
这个可以 ...

遇到前置++和后置++一起的时候,基本上不同的编译器会有不同的结果的。

前置++ 的 意思是 先++ 再参与运算。
后置++ 的 意思是 先参与运算,再++ 。

所有的问题都在后置++身上。关键在于 什么时候进行++操作。不同的编译器有不同的处理。
所以不要深究。明白原理,剩下的就可以搞通了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-24 23:37:23 | 显示全部楼层
汇编前几节课就有提到这个题,正如3楼所说。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-25 22:50:30 | 显示全部楼层
这些++i,i++ 都是会收编译器影响的 没必要纠结 你用的次数基本为0 。都可以替代的 。你如i=i+1。。
这种题 我告诉你 你敢在程序你出现 你就等着被拍死。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-25 10:36:51 | 显示全部楼层
新手,学习中,呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-31 09:53:14 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 01:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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