int a=3;t=a+++++a+++a;求t=?a=?
这个问题暴露了出题者的无知和无聊。事实上这个题目根本不成立,因为这在C语言中属于未定义行为。
哇,我有点无聊。
我用的是VC6.0编译器
运行:
int t1,t2;
int a=3,b=3;
t1=(a++)+(++a)+(++a);
t2=(++b)+(++b);
结果是t1=13,t2=10;
如果按照一楼的思路t2的结果应该是t2=4+5=9;
然而结果是t2=10;
解释一下为什么t2会等于10?
定义b=3的时候,在分配了地址和内存。
t2=(++b)+(++b);
先执行前面的++b,找到b地址所指向的内容并+1。结果是b指向的内容为4
再执行后面的++b,找到b地址所指向的内容并+1。结果是b指向的内容为5
最后再执行中间的+,找到两边变量所指向的内容,都指向同一个地方,所以取内容为5+5=10;
懂得这个道理,就能理解:
t1=(a++)+(++a)+(++a);
=3+5+5
=13
在vc6.0的结果是这样的。
t = 5+4+5 = 14
a=3 ---> a=6
我用的是DEV-C++编译器,a++的优先级低于++a,
这种写法跟人觉得实际应用意义好像不太大吧。
加法计算是先算右边的,所以:
t=(a++)+(++a)+(++a)
先执行第三个++a,返回a+1=4,之后a=4
然后执行第二个++a,返回a+1=5,之后a=5
最后执行第一个a++,返回a=5,之后a=6
所以t=5+5+4=14,a=6
好无聊的题目。。。。。
好傻逼的题目,不同的编译器可能有不同的答案。
这种属于undefined behavior
可以去看看c语言的陷阱与缺陷,挺有意思的