帮忙看下这个简单的c程序

[复制链接]
查看11 | 回复4 | 2012-1-9 17:59:46 | 显示全部楼层 |阅读模式
结果是未定义的,这里我引用一本书上的一段话,希望对你有用: Side Effect与Sequence Point 如果你只想规规矩矩地写代码,那么基本用不着看这一节。本节的内容基本上是钻牛角尖儿的,除了Short-circuit比较实用,其它写法都应该避免使用。但没办法,有时候不是你想钻牛角尖儿,而是有人逼你去钻牛角尖儿。这是我们的学员在找工作笔试时碰到的问题:int a=0;a = (++a)+(++a)+(++a)+(++a);据我了解,似乎很多公司都有出这种笔试题的恶趣味。答案应该是Undefined,我甚至有些怀疑出题人是否真的知道答案。下面我来解释为什么是Undefined。我们知道,调用一个函数可能产生Sid...
回复

使用道具 举报

千问 | 2012-1-9 17:59:46 | 显示全部楼层
这个的解释还是比较复杂的~总之要对C了解很多,而且没什么用。。。首先要知道的是C语言中printf的压栈是从最右边的输出元素开始的,也就是说,先执行的是最右边的i,所以一开始i=5(上面的3个加加。。),再到中间,中间的所有i都用5来替换,由于--i,++i的i的结果是进入表达示的,所以得到4+6+6=16.再最左边,i的值变为了6,所以输出是6.不明白...
回复

使用道具 举报

千问 | 2012-1-9 17:59:46 | 显示全部楼层
C++没有严格规定这种表达式的运算顺序不同编译器不一样...
回复

使用道具 举报

千问 | 2012-1-9 17:59:46 | 显示全部楼层
不说了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行