学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
 13 12
发新话题
打印

求教大家,简单问题,但为什么是这样的结果?(vc6.0)

求教大家,简单问题,但为什么是这样的结果?(vc6.0)

很简单的程序
void main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
}
但是结果为(8 7 8 8)无论是从左到右顺序求值还是从右到左顺序求值都不应该是这个结果吧?
我觉得从左到右应该是(9 8 8 9 )从右到左是(8 7 7 8),
是我的错还是编译器的原因?如果是从右到左顺序求值,为什么结果不是(8 7 7 8)而是(8 7 8 8)
请大家指点一下!

[ 本帖最后由 默默无纹 于 2008-2-24 21:04 编辑 ]

TOP

没人错了,书上写的很明白,这种式子没有确定的求值顺序,完全取决于编译器

TOP

回复 2# 的帖子

谢谢了,但我不明白的是结果呀!

TOP

没错,C并没有规定参数之间的计算顺序

TOP

高手们指点下呀!

TOP

引用:
以下是引用 bruin 在 2008-2-24 17:14 的发言:

没错,C并没有规定参数之间的计算顺序
貌似有顺序的..printf是从右向左的...

ps:::VC6.0的顺序是乱的...我可以举很多例子...
我谨写下了我的见解
如果写错了...欢迎大家交流...

TOP

对于
-- 和 ++ 的处理,是没有标准的。
完全取决于实现
—>〉Sun〈<—

TOP

时这样

原来如此!

TOP

ok

printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
是从右往左开始的!!!
结果没错!!! ++i 是9 i++是8 --i是7 i--是8

printf("%d\n%d\n%d\n%d\n",(++i,i),--i,(i++,i++),i--);
你看看这是什么结果!!!这个更难了!!!
这里关系到括号运算的!!!
你遇到的问题是我以前也遇到过的!!!
加油!!!朋友!!!

TOP

ok

printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
是从右往左开始的!!!
结果没错!!! ++i 是9 i++是8 --i是7 i--是8

printf("%d\n%d\n%d\n%d\n",(++i,i),--i,(i++,i++),i--);
你看看这是什么结果!!!这个更难了!!!
这里关系到括号运算的!!!
你遇到的问题是我以前也遇到过的!!!
加油!!!朋友!!!

TOP

 13 12
发新话题