393074656 发表于 2016-7-26 23:43:02

i++ 的问题。

#include<stdio.h>

int main(void)
{
      int i = 5;
      int p ;
      p = (++i)+(++i)+(++i);

      printf("%d",p);//输出结果 P = 24
   
      return0;
}

问: 为什么是8+8+8 = 24.我的理解是 第一个++i = 6 第二个就是6+1=7 第三个 8 . 6+7+8 = 21.

husuiwen 发表于 2016-7-27 08:57:50

应该可以写成这样:(i=++i)+(i=++i)+(i=++i),第一个括号值是6,第二个值是7,第三个值是8,最后i=8;
三个8相加等于24;不知道是不是这样。{:10_254:}

husuiwen 发表于 2016-7-27 09:01:20

我也才学5天C,大家错了勿喷{:10_279:}

低调的人! 发表于 2016-7-27 10:51:21

这个其实是优先级的问题
先算 ++i 完了之后 i 就变成8了
接着算加法就是 i+i+i 就变成24

shuofxz 发表于 2016-7-27 10:56:45

我记得小甲鱼老师在视频里好像说过这个问题
这个好像是跟编译器优化相关。当编译器对代码进行优化的时候,会对某些代码进行调整,可能调整后就把顺序给变了。不同的编译器执行时可能也会有不同的结果。
你可以查一下汇编后的代码

Jessie~~ 发表于 2016-7-27 11:10:30

弧矢七 发表于 2016-7-29 16:48:25

你这个答案应该是18吧!应该看看符号的优先级,是先算括号里边的
页: [1]
查看完整版本: i++ 的问题。