这三道题··理解不能
a=3
a++*++a
++a*a++
++a*++a
这三道题··理解不能
a=3
a++*++a
++a*a++
++a*++a
学生没办法啊。只有学啊
a=3
a++*++a//3*4
++a*a++//4*4
++a*++a//4*5
解释很简单,表达式求值,涉及到一个叫做序列点的概念,序列点是一个时间点。表达式真正做出运算是发生在这个序列点之后。
*(乘号)并不是序列点,表达求值的时候是到了;(分号)的时候才对整个表达式进行求值的,
也就是说,其实a++*++a;是要等到a变了两次之后才进行相乘运算的,也就是4*4=16
同理,其他的就是6*6=36
9*9=81;
当然,这和编译器的关系很大,如果你在BCB里面编写这段代码,结果就不是这样了,应为BCB里面规定的序列点和VC不同
说白了 这样的问题 根据你自己用的编译器 不同得到的结果肯定不一样 说的 商业化点 就是 如果你的软件被别人改了 1/3后 那么他就没有办法追究你的版权了 所以商家很多改了VC6.0里面的核心代码 ! 有些int型的字节是2位 但是有些是 4个字节 你自己多去下载几个编译器来运行你这样的代码 结果肯定不同 ! 建议你不要去研究这样的问题了 你就以你的编译器的 标准就行了