c++一小问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 16:30:31
#include<iostream>
using namespace std;
int main()
{
int i,j,m,n;
i=8;
j=10;
m=++i+j++;
n=(++i)+(++j)+m;
cout<<i<<'\t'<<j<<'\t'<<m<<'\t'<<n<<endl;
return 0;
}
运行结果10 12 19 41
为什么跟我想的不一样呀?请专业人士指点一二,谢啦!

实际是:
j++;
m=j+i;
i++;
i++;
j++;
n=i+j+m;

结果是:10 12 19 41 呀!你想的是什么呢?

前置++与后置++的区别在于运算的时候是:前置的++先对变量加1然后取其值进行表达式计算;而后置的++是先取其变量的值后对该变量加1。

所以:
m=++i+j++; /*由于++i是前置的++,先对i加1后取i的值,而j++是后置的++,先取j的值,后对j加1。所以计算完后:m=19,i=9,j=11*/
n=(++i)+(++j)+m;/*这里i,j都是前置++,都是先自增1,后对i,j自增1.这里计算完后:n=41,i=10,j=12*/

#include<iostream>
using namespace std;
int main()
{
int i,j,m,n;
i=8;
j=10;
m=++i+j++; \\i=9,j=11,m=19(现将j与++i相加赋值给m,然后 j再自加)
n=(++i)+(++j)+m; \\i=10,j=12,m=19,n=10+12+19=41
cout<<i<<'\t'<<j<<'\t'<<m<<'\t'<<n<<endl;
return 0;
}

#include<iostream>
using namespace std;
int main()
{
int i=8,j=10,m,n;
++i;j++;
m=i+j;
++i;++j;
n=i+j+m;
cout<<i<<" "<<j<<" "