以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 编程心得 』 (http://bbs.xml.org.cn/list.asp?boardid=42) ---- 向高手请教一道程序题 (http://bbs.xml.org.cn/dispbbs.asp?boardid=42&rootid=&id=39110) |
-- 作者:飞鹰战士 -- 发布时间:10/19/2006 8:39:00 PM -- 向高手请教一道程序题 在VC++ 下 main() 输出的结果为什么是 13 ? |
-- 作者:wcdxyl -- 发布时间:10/20/2006 10:33:00 AM -- ?绝对是12吧。 int i=2; printf("%d",(++i)+(++i)+(++i)); -》3+4+5 -》12 |
-- 作者:longshentailang -- 发布时间:10/20/2006 12:00:00 PM -- 结果是15。我在『 C/C++编程思想 』栏目里说明了理由。 |
-- 作者:lanmaozi -- 发布时间:10/20/2006 10:35:00 PM -- 编译环境不同,结果也不同的啊~~~ 每个编译器有自己定义的运算顺序点,I是每个表达式计算后增加还是在整个表达式计算后增加,由编译器决定~~~~~~ |
-- 作者:longshentailang -- 发布时间:10/21/2006 10:59:00 AM -- lanmaozi说的对,编译环境不同,结果也是不同的。我在VC++6.0和VS2005下的结果都是15,但在Dev-C++ version4.9.9.2下,所得的结果是13。 如下所示: #include <stdio.h> int main(void) 所得结果如下: 3 |
-- 作者:fresh_kid -- 发布时间:10/24/2006 11:44:00 PM -- 这是个表达式求值问题,与运算附的优先级有关:++比+的优先级高,而且好像是从右至左,所以在 int i=2 printf("%d",(++i)+(++i)); 中应该先是++i 后i为3,对于(++i)+i仍旧是先执行++i,之后i为4,剩下i+i 结果就为4+4=8 我在vc++6.0中实验过: #include<stdio.h> void main(){ int i=2,j=2,k=2; printf("k=%d\n",(++k)); printf("j=%d\n",(++j)+(++j)); printf("i=%d\n",(++i)+(++i)+(++i)); } 输出: k=3 j=8 i=13 j如前面所说为8,我觉得i应该为15,不知为何会是13。 |
-- 作者:wcdxyl -- 发布时间:10/27/2006 2:40:00 PM -- 啊?不好意思我用的是java得到12的。真的是编译器的问题???但从逻辑上是12没有错啊 |
-- 作者:wcdxyl -- 发布时间:10/27/2006 3:10:00 PM -- 终于搞清楚了。在Java语言的程序运行过程中.变量在每一次被引用时,都会创建相应的对象实例,分配相应的内存区域,其中的内容不会被重写,所以是12。c中是重写了,应该是15 |
-- 作者:wcdxyl -- 发布时间:10/27/2006 3:25:00 PM -- 总结下:看来开发程序的时候要注意不要这么写,有歧义的,最好分开写。 想要12就 a= i++; b = i++; c=i++; ->a+b+c 想要15就 a = i++; a = a++; a=a++; -> a*3 这样逻辑清楚也不会错,多好啊。如果哪个编译器这都能搞错就是它的问题了,呵呵 |
-- 作者:quanquanjw -- 发布时间:12/14/2006 1:17:00 PM -- 我都快忘记了 |
-- 作者:lidongbin -- 发布时间:12/15/2006 9:52:00 PM -- 因为有些编译器的理解很特别 支持动态赋值的编译器就理解为不同的值了 |
-- 作者:一分之千 -- 发布时间:1/5/2007 6:12:00 PM -- 这个就是编译器的不同出来的不同结果 在写程序的时候还是不要写这么垃圾的语句吧? 不过有得BT公司会拿来面试用.....呵呵 |
-- 作者:追梦 -- 发布时间:2/7/2007 5:43:00 PM -- 我用c#编译了也是12 |
-- 作者:zhang_tao -- 发布时间:5/9/2007 1:57:00 PM -- 在VC下执行下面的程序应该知道为什么了 int main() { int i=2; printf("%d\n",(++i)+(++i)+(++i)); i=2; printf("%d\n",i+(++i)+(++i)); i=2; printf("%d\n",(++i)+(++i)+i); getchar(); return 0; } |
-- 作者:weson -- 发布时间:5/9/2007 10:14:00 PM -- 我觉得逻辑上是12``JAVA和C#下得出的是12啊`` 编译方式不同吧``` 这是老谭爷爷的题目吧```` 他老人家最爱出这样的题目了``有的题目`每次运行的结果都不一样`` |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
125.000ms |