int a =1;
a = (1+ ++a)+ ++a;
为什么在前面加个括号,不是等于(1+2)+3,而是先进行了两遍自增,最后结果等于7,对这一点非常疑惑,难道如果一个表达式有许多++a,需要先自增完了,再进行运算吗
这个问题很无聊,这是C语言未定义行为,因此不同编译器,结果都不一样。
https://www.cnblogs.com/jaydenhpj/p/4432677.html
在表达式中,a++和++a的区别在于前者先使用a的值再自增,而后者先自增再使用a的值。因此,在a = (1 + ++a) + ++a;中,先计算(1 + ++a),此时a已经自增为2,然后再将2与自增后的a(3)相加,得到6,最后再将结果赋值给a并自增,所以a的值变为7。
如果一个表达式中有多个++a,它们的执行顺序是未定义的,因此最好避免在一个表达式中使用多个自增运算符。
下面是一个例子,可以帮助理解a++和++a的区别:
int a = 1;
int b = a++; // b的值为1,a的值变为2
int c = ++a; // c的值为3,a的值也为3