c++中自增自减符的问题

发布时间:2024-05-22 20:58 发布:上海旅游网

问题描述:

#include<iostream.h>

void main(void)
{
int i=3,s=0;
s=i+++i+++i++;
cout<<s<<'\n';
}为何值为9
#include<iostream.h>

void main(void)
{
int i=3,s=0;
s=(++i)+(++i)+(++i);
cout<<s<<'\n';
}为何值为16但
#include<iostream.h>

void main(void)
{
int i=3,s=0;
s=(++i)+s;s=(++i)+s;s=(++i)+s;cout<<i<<'\n';
cout<<s<<'\n';
}值为15而i=6?

问题解答:

先看第一个。自增运算符++的优先级是2,高于算木运算符+(3),虽然前++和后++的优先级相同但是在一起的时候是后++高于前++,关于这点可以自己验证。所以,第一个表达式就变成这个样子:s=(i++)+(i++)+(i++);这样就好理解了,后++ 实在整个表达式运算结束之后才++的,所以在这个表达式中i的值一直是3,所以s值为9,不过表达式之后i的值应该变成6;

在看第二个。任何一个表达式都回产生一个临时值(这个可以自己查书找到,而且比较重要),+双目运算符需要两个数才能完成计算。这个表达式都是前++,++i,此时i=4,然后+,但是他需要两个数字才能完成运算,所以要等到+号后面的值计算完毕,又是++i,此时i =5。这个i变成了,那么前面的i因为和他是一个变量,所以也是5,这样算木运算符+才得到了两个数字,才能继续计算下去。5+5得到10存在临时变量中,然后再等到第二个+号后面的++i结束,得到6,这样 临时变量中的10和6相加,得到16,这是最后结果,在赋值给s,所以s的值才是16。

理解了第二个,再看第三个就好办了。第三个这里每次在运算之前i的值都回+1,实际参与运算的数值分别是4,5,6。这样相加之后,s的值当然是15了。

i++就是先使用i的原值,然后给i加1,
++i就是先给I的原值加1然后再使用i的值

s=i+++i+++i++;
相当于s=(i++)+(i++)+(i++)
i++是先使用I再给I加一,这个楼主应该是知道的,所以3+3+3等于9

s=(++i)+(++i)+(++i);
这个值楼主是不是搞错了,应该是18的啊.++i先给I加1再使用,第一个++i之后i为4,第二个++i这后i为5,第三个++i后i为6,6+6+6=18.

s=(++i)+s;
第一个s为0,++i后i为4,所以s为4
s=(++i)+s;
第二个s为4,++i后i为5,所以s为9
s=(++i)+s
第三个s为9,++i后i为6,所以s为15

s=i+++i+++i++;
这里的i是过了这个分号才自增.

s=(++i)+(++i)+(++i);
这里的i是自增加了再作其它的运算,自增后的i 值应是6,s的值是18,不是16

s=(++i)+s;s=(++i)+s;s=(++i)+s;这里的i是自增加了再作其它的运算
第一个s=(++i)+s;i变4,所以s的值是4

第二个s=(++i)+s,i变5,所以s的值是4+5=9

第三个s=(++i)+s,i变6,所以s的值是9+6=15

热点新闻