24小时热门版块排行榜    

查看: 779  |  回复: 12
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

duzongyin

银虫 (小有名气)

[求助] 请教

#include
main()
{
   int a;
   a=1;
   b=++a+ ++a+ ++a;
   printf("%d\n",b);
}
请教此输出结果是多少?并请教如何计算的...谢谢
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

denganliang

银虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
jjdg(金币+1): 感谢应助 2012-03-08 01:59:10
你变量b怎么没有声明啊!!!
欢迎大家访问我的网站:http://aizaoqi.com
4楼2012-03-06 09:16:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 13 个回答

sudo

木虫 (正式写手)

★ ★
余泽成(金币+2): 谢谢参与应助! 2012-03-11 23:25:41
网上抄了一段,你可以去翻下标准确认下,嗯

"Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored."

"This paragraph renders undefined statement expressions such as
i = ++i + 1;
a[i++] = i;
while allowing
i = i + 1;
a = i;"

简单地讲就是:同一个表达式如果多次改变同一个变量的值,行为未定义。你给出的是一个最典型的情况,因此,在不同编译器编译出来的结果,甚至是同一个编译器不同优化选项的编译结果,都可能得到不同的结果。

然后,如果面试被问到这个题,说出上面那段话应该就挺好的。如果是在试卷上看到,那么那个试卷可以扔进垃圾堆
2楼2012-03-05 17:16:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)


余泽成(金币+1): 鼓励讨论! 2012-03-11 23:25:51
引用回帖:
2楼: Originally posted by sudo at 2012-03-05 17:16:29:
网上抄了一段,你可以去翻下标准确认下,嗯

"Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthe ...

恩,这个就好比编译器的方言,各地不同。
很女子很弓虽大
3楼2012-03-05 19:00:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

十年磨练

木虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
jjdg(金币+1): 感谢应助 2012-03-08 01:59:16
应该输出12
因为这要考虑运算符号的优先顺序,++比+的的优先级别高,先算++,即a进行了三次自加一的a=4,然后计算b的值,即b等于三个四相加:b=12
时刻保持虚心学习的态度
5楼2012-03-06 13:27:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见