++J的计算问题

C语言 码拜 8年前 (2017-04-18) 1284次浏览
j=3;
b=(++j)+(++j)+(++j);
为什么计算结果是b=16?
解决方案

2

你用的是什么编译器,本人用Xcode亲测是15啊

10

这个是15,等同于4+5+6

5

j 在一整个表达式中被改变了三次,这种表达式的行为没有定义(Undefined Behavior),编译器本来不想让你成功算出一个数来的,但看你这是符合语法的程序,就找了一个有些道理的数 例如16,作为结果了。当然,编译器告诉你它等于0也是合理的,原因是编译器本来就不想算这个数。假如编译器在处理这条语句时当场挂掉,也是正当的处理,而且本人要称赞这个编译器节操高尚,那时题主就要问为什么这个语句会导致编译器自尽了…….
同一变量,在相邻序列点之间,只能被改变一次,否则就是 Undefined Behavior.

5

通常的理解应该是4+5+6=15
而题主得到的结果居然是16,那就只能是4+6+6=16
这取决于编译器生成代码的条件了,这种题不同的编译器可能会得出不同的结果,所以没有太大意义
对于自增操作,你只要弄懂++j和j++的区别就好了,其他的情况不用考虑,正式的项目中没有人会这样写程序

6

这是未定义行为,涉及顺序点,不同编译器可以有不同实现,不要写这样的代码
关于C,C++表达式求值顺序  http://bbs.csdn.net/topics/370153775

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明++J的计算问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)