admintow 发表于 2013-11-21 20:25:35

关于自增自减运算符。有几个问题

本来想偷个懒的。。看来不行了。,这里应该是比较难的一部分



程序代码
#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
我表示不理解。。请大家帮忙解答一下

提个建议:每个例题不一定要打出来。但有必要的一定要讲解

ascxyh009 发表于 2013-11-21 21:11:21

p=(i++)+(i++)+(i++);
上面的语句等价于p=i + i + i;               之后i++;执行三次,你打印i的值是8
希望能帮到你
{:5_109:}

云客联盟 发表于 2013-11-21 21:54:51

不同的编译器会有不同的结果。

admintow 发表于 2013-11-21 22:10:45

ascxyh009 发表于 2013-11-21 21:11 static/image/common/back.gif
p=(i++)+(i++)+(i++);
上面的语句等价于p=i + i + i;               之后i++;执行三次,你打印i的 ...

可否理解为,。++运算符如果没有进行复赋值,则值不变

ascxyh009 发表于 2013-11-22 04:12:42

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++;
最后      保持这种求知欲是不断进步的动力加油!

ヽ朝暮是安然 发表于 2013-11-22 13:06:39

有点意思啊!~{:1_1:}   学习中突破?!~

平平常常丶 发表于 2013-11-22 13:55:28

ascxyh009 发表于 2013-11-22 04:12 static/image/common/back.gif
这么说吧后++运算优先级是比较低的用括号括起来也是一样所以i并没有进行任何自增的操作所以p = 3i...

原来是这样,我也是刚知道,谢谢啦!!!{:5_110:}

—————————————
【人要活的有规律,有效率丶】
—————————————

vsa_ppp 发表于 2013-11-22 15:06:01

运算符优先级。

网友 发表于 2013-11-22 16:30:29

前自增跟后自增的问题
相同:
  结果都是i自增1
不同:
  前自增整体表达式的值是i+1后的值
  K=++i;      //K=4I=4
  后自增整体表达式的值是i+i之前的值
  J=i++;      //J=3   J=4

ヽ朝暮是安然 发表于 2013-11-22 16:45:58

这个问题我理解拉!~    按照运算符的顺序!~:shy:

admintow 发表于 2013-11-22 16:50:27

ascxyh009 发表于 2013-11-22 04:12 static/image/common/back.gif
这么说吧后++运算优先级是比较低的用括号括起来也是一样所以i并没有进行任何自增的操作所以p = 3i...

也就是说。这里是先把所有的I++都算出来,再相加
根据“后自增整体表达式的值是i+i之前的值”
所以是5+5+5?

cocoboy027 发表于 2013-11-22 16:52:32

云客联盟 发表于 2013-11-21 21:54 static/image/common/back.gif
不同的编译器会有不同的结果。

正解,,不同编译器处理的方式会不同,,我们编程的时候往往要避免这种情况,以增强程序的可移植性!!!

ascxyh009 发表于 2013-11-22 19:48:50

平平常常丶 发表于 2013-11-22 13:55 static/image/common/back.gif
原来是这样,我也是刚知道,谢谢啦!!!

—————————————


与君共勉{:5_91:}

ascxyh009 发表于 2013-11-22 19:52:58

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]
查看完整版本: 关于自增自减运算符。有几个问题