问题描述:
如下面的程序:
#include<stdio.h>
void main()
{
int num = 1, sum;
sum = ++num + ++num;
printf("%d\n", sum);
}
为什么以上程序的结果会是“6”?
而下面的程序结果却是“5”!
#include<stdio.h>
void main()
{
int num = 1, sum, a, b;
sum = (a = (++num)) + (b = (++num));
printf("%d\n", sum);
}
请问有什么区别?编译器是怎么计算的?谢谢
问题解答:
上面num初识化为1,++之后变成了2,后面的那个++之后又变成了3,
这样num现在为3,3+3就是6了。
下面num初始化为1,++为2赋给a,再++为3,赋给b,a+b=2+3所以为5。
不过在编写程序的时候不要使用这样容易使人产生误解的语句,尽量使用简单的语句。
这个问题比较麻烦的.不同的版本编译器的处理不同.涉及到程序运算的优先级别问题.在生成OBJ文件的时候就会产生差异.最好不要使用这种模糊的语言.
我这里下面的程序输出也是 6
我下面的程序输出也是6啊…………
num+num
a+b