关于自增自减运算符。有几个问题
本来想偷个懒的。。看来不行了。,这里应该是比较难的一部分程序代码
#include <stdio.h>
int main(void)
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
printf("%d",p);
}
问题所在:
程序的结果是15
但我觉得。应该是
5(在使用之后加一,这里不加)
6(前面加了1 )
7(再加1)
所以我认为结果应该是18
但编译器告诉我结果是15 百度说是5+5+5=15
我表示不理解。。请大家帮忙解答一下
提个建议:每个例题不一定要打出来。但有必要的一定要讲解
p=(i++)+(i++)+(i++);
上面的语句等价于p=i + i + i; 之后i++;执行三次,你打印i的值是8
希望能帮到你
{:5_109:} 不同的编译器会有不同的结果。 ascxyh009 发表于 2013-11-21 21:11 static/image/common/back.gif
p=(i++)+(i++)+(i++);
上面的语句等价于p=i + i + i; 之后i++;执行三次,你打印i的 ...
可否理解为,。++运算符如果没有进行复赋值,则值不变 admintow 发表于 2013-11-21 22:10 static/image/common/back.gif
可否理解为,。++运算符如果没有进行复赋值,则值不变
这么说吧后++运算优先级是比较低的用括号括起来也是一样所以i并没有进行任何自增的操作所以p = 3i在对p赋值之后i才会做++操作而且是做3次
p = (i++)+(i++)+(i++);这条语句就相当于下面4条语句
p = i + i + i;
i++;
i++;
i++;
最后 保持这种求知欲是不断进步的动力加油! 有点意思啊!~{:1_1:} 学习中突破?!~ ascxyh009 发表于 2013-11-22 04:12 static/image/common/back.gif
这么说吧后++运算优先级是比较低的用括号括起来也是一样所以i并没有进行任何自增的操作所以p = 3i...
原来是这样,我也是刚知道,谢谢啦!!!{:5_110:}
—————————————
【人要活的有规律,有效率丶】
————————————— 运算符优先级。 前自增跟后自增的问题
相同:
结果都是i自增1
不同:
前自增整体表达式的值是i+1后的值
K=++i; //K=4I=4
后自增整体表达式的值是i+i之前的值
J=i++; //J=3 J=4 这个问题我理解拉!~ 按照运算符的顺序!~:shy: ascxyh009 发表于 2013-11-22 04:12 static/image/common/back.gif
这么说吧后++运算优先级是比较低的用括号括起来也是一样所以i并没有进行任何自增的操作所以p = 3i...
也就是说。这里是先把所有的I++都算出来,再相加
根据“后自增整体表达式的值是i+i之前的值”
所以是5+5+5? 云客联盟 发表于 2013-11-21 21:54 static/image/common/back.gif
不同的编译器会有不同的结果。
正解,,不同编译器处理的方式会不同,,我们编程的时候往往要避免这种情况,以增强程序的可移植性!!! 平平常常丶 发表于 2013-11-22 13:55 static/image/common/back.gif
原来是这样,我也是刚知道,谢谢啦!!!
—————————————
与君共勉{:5_91:} admintow 发表于 2013-11-22 16:50 static/image/common/back.gif
也就是说。这里是先把所有的I++都算出来,再相加
根据“后自增整体表达式的值是i+i之前的值”
所以是5+ ...
没有先算i++ 先算p在计算p的时候i没有自增 一直都是5, 所以p才是15算完p之后i自增三次
页:
[1]