X 我知道了TIPS:左右滑动导航栏可以查看更多栏目
int j=2,m;
m=(j++)+(++j)+(j++);
m为什么运行出来为啥等于9
>> 本文固定链接: http://www.vcgood.com/archives/2824
>> 转载请注明: 星情飞飞 2008年10月13日 于 C语言帝国 发表
我说说吧:第一个括号计算的结果是2,但之后j变成3了;
第二个括号,已经变成3的j又自加变成4,计算结果就是4;
第三个括号计算结果是原来的4,但之后j变成5了;
三个括号里的值相加2+4+4=10
但…..
#include<stdio.h>void main(void){ int j=2,m; m=(j++)+(j++)+(j++); printf(“%d\n”,m);}
的结果是6 真是奇怪了!
#include<stdio.h>void main(void){ int j=2,m,n,q,s; m=(j++); n=(++j); q=(j++); s=m+n+q; printf(“%d\n”,s);}
的结果是10啊!!!
我很是郁闷!!继续研究!
想来想去终于想出来了:(j++)+(++j)+(j++);是一句,()的优先级大于+,三个括号会同时计算,都是从j=3开始,每个括号作为单独的一个算术表达式进行计算的。我们所谓的自加只会在下一句中起作用。这样3+3+3=9啦!!!
#include<iostream>using namespace std;int main(){int i=2,j=2,m,n;n = (i++)+(i++)+(i++);//语句5 cout<<n<<endl;/**在整个”语句5″执行后,*才进行3个自加运算(后自加)*说明后自加是在整条语句结束后 *进行自加。 */m=(++j)+(j++)+(j++);/**加法运算顺序是从左向右执行的*首先执行左边的加号 (++j)+(j++),在执行第一个加号前执行(++j)此时j=3*左边加号执行完结果是 6,在执行第二个加号后结果为9 */cout<<m<<endl;getchar();return 0;}以上说明 :前自加是在该变量在运算之前进行的后自加是在该变量所在的语句执行后进行的
[QUOTE=s9y9r9]想来想去终于想出来了:(j++)+(++j)+(j++);是一句,()的优先级大于+,三个括号会同时计算,都是从j=3开始,每个括号作为单独的一个算术表达式进行计算的。我们所谓的自加只会在下一句中起作用。这样3+3+3=9啦!!![/QUOTE]
(j++)+(j++)+(++j)=?
(j++)+(j++)+(++j)=3+3+3=9
[QUOTE=s9y9r9]
[/QUOTE]
哦
我用的编译器是gcc打印出来的结果是(j++)+(j++)+(++j)=7
你把语句看错了
中间那个是(++j)
[QUOTE=星情飞飞][QUOTE=s9y9r9]
[/QUOTE] [/QUOTE]
m=(j++)+(j++)+(j++);
m=6没有错
前自加就是 在用到变量时先加后用
后自加就是 在执行整个语句后再加
嗯
你说的对
谢谢哈
你必须先 登录才能发表评论。
我说说吧:第一个括号计算的结果是2,但之后j变成3了;
第二个括号,已经变成3的j又自加变成4,计算结果就是4;
第三个括号计算结果是原来的4,但之后j变成5了;
三个括号里的值相加2+4+4=10
但…..
#include<stdio.h>
void main(void)
{
int j=2,m;
m=(j++)+(j++)+(j++);
printf(“%d\n”,m);
}
的结果是6 真是奇怪了!
#include<stdio.h>
void main(void)
{
int j=2,m,n,q,s;
m=(j++);
n=(++j);
q=(j++);
s=m+n+q;
printf(“%d\n”,s);
}
的结果是10啊!!!
我很是郁闷!!继续研究!
想来想去终于想出来了:(j++)+(++j)+(j++);是一句,()的优先级大于+,三个括号会同时计算,都是从j=3开始,每个括号作为单独的一个算术表达式进行计算的。我们所谓的自加只会在下一句中起作用。这样3+3+3=9啦!!!
#include<iostream>
using namespace std;
int main(){
int i=2,j=2,m,n;
n = (i++)+(i++)+(i++);//语句5
cout<<n<<endl;
/*
*在整个”语句5″执行后,
*才进行3个自加运算(后自加)
*说明后自加是在整条语句结束后
*进行自加。
*/
m=(++j)+(j++)+(j++);
/*
*加法运算顺序是从左向右执行的
*首先执行左边的加号 (++j)+(j++),在执行第一个加号前执行(++j)此时j=3
*左边加号执行完结果是 6,在执行第二个加号后结果为9
*/
cout<<m<<endl;
getchar();
return 0;
}
以上说明 :
前自加是在该变量在运算之前进行的
后自加是在该变量所在的语句执行后进行的
[QUOTE=s9y9r9]想来想去终于想出来了:(j++)+(++j)+(j++);是一句,()的优先级大于+,三个括号会同时计算,都是从j=3开始,每个括号作为单独的一个算术表达式进行计算的。我们所谓的自加只会在下一句中起作用。这样3+3+3=9啦!!![/QUOTE]
(j++)+(j++)+(++j)=?
(j++)+(j++)+(++j)=3+3+3=9
[QUOTE=s9y9r9]
(j++)+(j++)+(++j)=3+3+3=9
[/QUOTE]
哦
我用的编译器是gcc打印出来的结果是(j++)+(j++)+(++j)=7
[QUOTE=s9y9r9]
#include<stdio.h>
void main(void)
{
int j=2,m;
m=(j++)+(j++)+(j++);
printf(“%d\n”,m);
}
的结果是6 真是奇怪了!
你把语句看错了
中间那个是(++j)
[/QUOTE]
[QUOTE=星情飞飞][QUOTE=s9y9r9]
#include<stdio.h>
void main(void)
{
int j=2,m;
m=(j++)+(j++)+(j++);
printf(“%d\n”,m);
}
的结果是6 真是奇怪了!
你把语句看错了
中间那个是(++j)
[/QUOTE] [/QUOTE]
m=(j++)+(j++)+(j++);
m=6没有错
前自加就是 在用到变量时先加后用
后自加就是 在执行整个语句后再加
嗯
你说的对
[QUOTE=s9y9r9]想来想去终于想出来了:(j++)+(++j)+(j++);是一句,()的优先级大于+,三个括号会同时计算,都是从j=3开始,每个括号作为单独的一个算术表达式进行计算的。我们所谓的自加只会在下一句中起作用。这样3+3+3=9啦!!![/QUOTE]
谢谢哈