求大佬帮忙看一下。这个运行结果不是很理解。
#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
我这么想哪里有问题呀?求大神解惑。 void main()
{
int i=1;
printf("%d\n",i*i++*++i*i++);//4
}
这个结果为什么是4呀。我的理解是:1*1*3*3所以我认为结果应该是9 这里应该怎么理解呀{:5_100:} 不建议写这种代码,可读性极差,而且不同编译器可能得到不同的答案
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
能帮忙解释一下吗,我不太懂 a98 发表于 2018-2-7 10:16
不是我写的,这是考题,我不太理解这个输出结果,能麻烦解释一下吗。
一种可能的解释:
i初始为1
i*i++*++i*i++的执行过程:
从左到右执行,变成
1×1×(++i)×i
遇到前置++后i变成2,所以有
1×1×2×2,结果为4 BngThea 发表于 2018-2-7 14:31
一种可能的解释:
i初始为1
i*i++*++i*i++的执行过程:
emmmm...
我看到一个解释是当多个i压入堆栈时,printf函数就好像不认识i++和i--了,单个就可以。
所以是1*1*2*2
也就是你这样 a98 发表于 2018-2-7 15:31
emmmm...
我看到一个解释是当多个i压入堆栈时,printf函数就好像不认识i++和i--了,单个就可以。
所以说不要写这种类型的代码 a98 发表于 2018-2-7 15:31
emmmm...
我看到一个解释是当多个i压入堆栈时,printf函数就好像不认识i++和i--了,单个就可以。
嗯。。是题目这么出。
页:
[1]