以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  请教高手一个编程问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=39111)


--  作者:飞鹰战士
--  发布时间:10/19/2006 8:41:00 PM

--  请教高手一个编程问题
在VC++ 下

main()
{
   int i=2;
   printf("%d",(++i)+(++i)+(++i));
}

输出的结果为什么是 13 ?


--  作者:longshentailang
--  发布时间:10/19/2006 10:47:00 PM

--  
你那个输出结果是错的,应该是15。因为前加操作符++优先级最高(在这里),所以先进行3次++操作,使得i的值变为5,然后再就是3个5相加(5+5+5),故最终所得结果是15。
--  作者:zhu_ruixian
--  发布时间:10/20/2006 1:31:00 PM

--  
结果是15
#include "stdio.h"
main()
{
   int i=2;
   printf("%d",(++i)+(++i)+(++i)+(++i));
   getchar();
}
的输出是  24       上面说的很对。没试之前我还以为是12。呵呵
--  作者:longshentailang
--  发布时间:10/20/2006 3:40:00 PM

--  
在这里++操作符的优先级并不是最高的,优先级最高的是小括号(),其次才是++操作符。上面说错了,但还是那样运算的,结果仍然是15。
可以看一下URL:http://xdjy.cxtc.edu.cn/wshfdz/bym_yxb_c/symbol_level.htm,
C语言运算符的“优先级口决”。
--  作者:飞鹰战士
--  发布时间:10/20/2006 6:44:00 PM

--  
谢谢各位了,不过你们是不是用的VC++6.0呀?我在 .NET下运行也是15,不过我想了解一下是怎么编译的?
--  作者:longshentailang
--  发布时间:10/21/2006 11:05:00 AM

--  
其实,输出的结果13也是正确的。这取决于不同的编译环境,我在Dev-C++(v4.9.9.2)下运行所得的结果就是13。在VC++6.0和VS2005下是15。
--  作者:won112
--  发布时间:10/21/2006 6:59:00 PM

--  
楼上的好象有错啊,

我在VC++6.0中编译的结果就是13,

但我不知是什么原因才造成这种结果,

想知道,

请高手给条活路!!!!!!!!!!


--  作者:cqthinking
--  发布时间:4/7/2007 11:28:00 AM

--  
就是编译器的问题吧,
没什么对错的,
编程序时,只要考虑不同的编译器特点,
利用就可以了阿
--  作者:Christopher-sky
--  发布时间:4/8/2007 3:29:00 AM

--  
我觉得++运算符从后面先算,最后的两个i有了数值才可以进行加法,所以后面两个加起来是8,再进行前面的加法,i是5,所以,5+8=13.
同理,其他的运算结果也是这样得来...
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms