一个C程序结果为什么是这个???

来源:百度知道 编辑:UC知道 时间:2024/05/30 07:58:25
#include <stdio.h>
void main()
{
int m=5,n,p=5,q;
n=(m++)+(m++)+(m++);
q=(++p)+(++p)+(++p);
printf("n=%d\n q=%d\n",n,q);
}
结果是:15 24
是怎么算的?
n=(m++)+(m++)+(m++);
n=5+5+5
q=(++p)+(++p)+(++p);
这个不是应该:6+7+8吗?

编译器不同结果不通
m++是先取值,再加1
++p是先加1,再取值

所以第一个是5+5+5,做完后m等于8
第二个是先把p加到8,再做8+8+8

q=(++p)+(++p)+(++p);
把三个++都做完了,p等于8了,才做加法运算的,所以是8+8+8

m++是先取m的值,再加1;
++p是p先加1后,再取p的值

在表达式中。是统一先计算++A的,然后取直计算。然后再计算A++
而在printf等函数中,是从右向左一个一个的算的。
你可以再试下在函数中。例如
printf("%d",(m++)+(m++)+(m++) );
你自己就明白了。

都让他们说了我就不说了。

不同的编译器结果不同
vc6跟vc.net结果也会不同
不过只要记住++p和 p++的区别就行了

一句话,你的程序被编译器优化了,实际上
相当于以下表示:
源:p=(++p)+(++p)+(++p);
优化:
p += 3;
p *= 3;

源:p=(p++)+(p++)+(p++);
优化:
p *= 3;
p += 3;