#include"stdio.h"
main()
{
int a=1,b=2;
b+=++a*++a;
printf("%d",b);
}
这段代码的运行结果为什么是11,要具体分析!谢谢!
#include"stdio.h"
main()
{
int a=1,b=2;
b+=++a*++a;
printf("%d",b);
}
这段代码的运行结果为什么是11,要具体分析!谢谢!
对a进行了两次前缀++操作,*号左边++a后a=2,但这并是说*号左边一定是2,因为a是个变量,它的值在*号这个双目运算符(自左至右结合性)左右两边都有值之前可能产生变动(如代码中所示),一旦*号这个双目运算符(自左至右结合性)左右两边都有值时,*法运算执行,这时a经过两次++得a=3,所以b=2+3*3=11。
根据*号这个双目运算符(自左至右结合性)左右两边都有值时乘法运算执行这个性质,扩展代码:
int a=1,b=2;
b+=++a*++a*++a;
printf("%d",b);
结果是b=38,计算过程是b=2+3*3*4=38
++的优先级高于*
b+=++a*++a;相当于b=b+((++a)*(++a));
由两次++a,a的值变成3
b=2+3*3.
++比*高级,所以先运算++
b+=++a*++a;相当于
++a;(a=2)
++a; (a=3)
b+=a*a;