鱼C论坛

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

[已解决]求大佬帮忙看一下。这个运行结果不是很理解。

[复制链接]
发表于 2018-2-7 09:49:18 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
void main()
{
        int i=8;
        printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
}


我想请问这个程序vc6.0里的输出为什么是:8 7 8 8 -8 -8

printf 参数从右往左压栈不是应该是这样吗:

i等于8
——>    -i--     ——> 输出-8,i等于7
——>   -i++   ——> 输出-7,i等于8
——>   i--       ——> 输出8,i等于7
——>   i++     ——> 输出7,i等于8
——>   --i       ——> 输出7,i等于7
——>   ++i     ——> 输出8,i等于8

所以printf出栈的结果应该为:8 7 7 8 -7 -8

我这么想哪里有问题呀?求大神解惑。
最佳答案
2018-2-7 10:08:55
不建议写这种代码,可读性极差,而且不同编译器可能得到不同的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-7 10:01:07 | 显示全部楼层
void main()
{
        int i=1;
        printf("%d\n",i*i++*++i*i++);//4  
}


这个结果为什么是4呀。我的理解是:1*1*3*3  所以我认为结果应该是9   这里应该怎么理解呀  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-7 10:08:55 | 显示全部楼层    本楼为最佳答案   
不建议写这种代码,可读性极差,而且不同编译器可能得到不同的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-7 10:16:02 | 显示全部楼层
a98 发表于 2018-2-7 10:01
void main()
{
        int i=1;

不是我写的,这是考题,我不太理解这个输出结果,能麻烦解释一下吗。


void main()
{
        int i=1;
        printf("%d\n",i*i++*++i*i++);//4  
}


这个结果运行结果是4。

但我的理解是:1*1*3*3  所以我认为结果应该是9

能帮忙解释一下吗,我不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-7 14:31:12 | 显示全部楼层
a98 发表于 2018-2-7 10:16
不是我写的,这是考题,我不太理解这个输出结果,能麻烦解释一下吗。

一种可能的解释:
i初始为1
i*i++*++i*i++的执行过程:
从左到右执行,变成
1×1×(++i)×i
遇到前置++后i变成2,所以有
1×1×2×2,结果为4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-7 15:31:11 | 显示全部楼层
BngThea 发表于 2018-2-7 14:31
一种可能的解释:
i初始为1
i*i++*++i*i++的执行过程:


emmmm...

我看到一个解释是当多个i压入堆栈时,printf函数就好像不认识i++和i--了,单个就可以。

所以是1*1*2*2

也就是你这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-7 15:37:27 | 显示全部楼层
a98 发表于 2018-2-7 15:31
emmmm...

我看到一个解释是当多个i压入堆栈时,printf函数就好像不认识i++和i--了,单个就可以。

所以说不要写这种类型的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-7 16:19:12 | 显示全部楼层
a98 发表于 2018-2-7 15:31
emmmm...

我看到一个解释是当多个i压入堆栈时,printf函数就好像不认识i++和i--了,单个就可以。

嗯。。是题目这么出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 13:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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