a98 发表于 2018-2-7 09:49:18

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

#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

我这么想哪里有问题呀?求大神解惑。

a98 发表于 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   这里应该怎么理解呀{:5_100:}

BngThea 发表于 2018-2-7 10:08:55

不建议写这种代码,可读性极差,而且不同编译器可能得到不同的答案

a98 发表于 2018-2-7 10:16:02

a98 发表于 2018-2-7 10:01
void main()
{
        int i=1;


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


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


这个结果运行结果是4。

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

能帮忙解释一下吗,我不太懂

BngThea 发表于 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

a98 发表于 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

也就是你这样

BngThea 发表于 2018-2-7 15:37:27

a98 发表于 2018-2-7 15:31
emmmm...

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


所以说不要写这种类型的代码

a98 发表于 2018-2-7 16:19:12

a98 发表于 2018-2-7 15:31
emmmm...

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


嗯。。是题目这么出。
页: [1]
查看完整版本: 求大佬帮忙看一下。这个运行结果不是很理解。