int a=3,b;
b=++a+(++a)+(++a);
printf("%d",b);
输出结果为什么是16?我觉得是15啊
不要纠结于此,编译器不同,可能结果不同
。。。。。你到底行不行,,你可以自己去试试。
结果应该是15的,不知道你的编译器是不是在运行时出bug了
不是十五。。。。还需要重申吗?
这是一种很差的编程习惯,对于这个,编译器不同,处理方法就可能不同,不要再纠结于此了
这是java语言编写的
这是按照C写的,确实是16,问题就在于;
看懂了么???
至于为啥不认识括号,我也说不清,以前见过类似问题,主要是看C的底层究竟是怎么运行的,这个可能要用汇编分析每一步代码执行,你听着可能觉得更惊讶了吧。。
我在gcc下编译运行结果确实是16,是正确的。b=++a+(++a)+(++a)的结果为16是程序的处理顺序造成的。
我的测试代码:
#include
int main(void)
{
int a = 3, b = 0;
b = ++a+(++a)+(++a);
printf("%d\n", b);
return 0;
}
以下下是汇编的代码(PS:我没有给出完整的汇编代码,只是给出了能说明问题的部分代码)
movl $3, 24(%esp) ;对应代码 b = 3
movl $0, 28(%esp) ; a = 0
addl $1, 24(%esp) ; ++a,此时a=4
addl $1, 24(%esp) ; ++a,此时a=5
movl 24(%esp), %eax ; 此时计算好了(++a)+(++a),注意此时a都是5,并保存到%eax寄存器中
addl %eax, %eax ; 所以计算结果为10,保存到%eax寄存器中
addl $1, 24(%esp) ; ++a,此时a=6
addl 24(%esp), %eax ; 此时计算结果为16
当然,如果你在定义a, b变量的时候在前面加上volatile的话,输出结果就是15了。^_^
http://www.guokr.com/blog/471312/
对于C的初学者来说,被要求做下面的这种题目真的是脑残的不能再脑残的行为。但是很多C初级教程——居然都有这样的题。
我认为结果是15,你运行看结果了么?还是只是考试试题