ljx8455 发表于 2015-1-13 23:37:59

c语言

请教下列代码运算为什么会等于27,而不是24.:sweat:
#include<stdio.h>
#include<stdlib.h>
void main()
{
        int i =8;
        int y =(i--) + (++i) + (i++);
        printf("%d,%d,%d,%d\n", y, i++, i--, ++i);
        system("pause");

!@R键! 发表于 2015-1-19 19:47:09

:shock:

zjc7836 发表于 2015-1-19 20:53:06

y=9+9+9

zjc7836 发表于 2015-1-19 20:54:26

y=(++i)+(++i)=20

hallo,world 发表于 2015-1-20 13:38:30

编译器问题 ...看看反汇编代码...      能知道编译器到底是怎么读取的

爱琴海里的星 发表于 2015-1-20 15:30:30

:mad:

康小泡 发表于 2015-1-21 17:09:33

先弄懂i++ 跟++i 的区别八   i++ 是先使用i的值然后在加一   ++i是先加1再使用i的值自减跟自加是一个道理的。

shaoguanfa 发表于 2015-1-21 20:41:50

#include<stdio.h>
#include<stdlib.h>
void main()
{
        int i = 8;
//        int y = (i--) + (++i) + (i++);
        printf("%d,%d,%d,%d\n", (i--) + (++i) + (i++), i++, i--, ++i);
}
这样输出的结果是30,8,9,10
纠结吗?
跳过吧
{:5_92:}

love105827 发表于 2015-1-21 21:52:21

#include<stdio.h>
#include<stdlib.h>
void main()
{
      int i =8;
      int y =(i--) + (++i) + (i++);
      printf("%d,%d,%d,%d\n", y, i++, i--, i);//这回在测试得 27 9 9 9 理解了吗
      system("pause");
}
先用++i的值进行运算 上边就是(9--)+ 9 +( 9++) 之后8+9+10=27
输出的y=27 i++,i--,++i
因为上边的i还是9 在先用++i的缘故 ++i=10 这部输出没有后续运算i++,i--不运算
上边三个都为 10,10,10

love105827 发表于 2015-1-21 21:56:27

shaoguanfa 发表于 2015-1-21 20:41
这样输出的结果是30,8,9,10
纠结吗?
跳过吧

    #include<stdio.h>
    #include<stdlib.h>
    void main()
    {
            int i = 8;
    //      int y = (i--) + (++i) + (i++);
            printf("%d,%d,%d,%d\n", (i--) + (++i) + (i++), i++, i--, ++i);
    }
这一步 出的结果为30 9 9 9 你编译器有问题吧

love105827 发表于 2015-1-21 22:26:51

#include<stdio.h>
#include<stdlib.h>
void main()
{
      int i =8;
      int y =(i--) + (++i) + (i++);
      printf("%d,%d,%d,%d\n", y, i++, i--, i);//这回在测试得 27 9 9 9 理解了吗
      system("pause");
}
先用++i的值进行运算 上边就是(9--)+ 9 +( 9++) 之后8+9+10=27//不好意思这里错了 是9+9+9
输出的y=27 i++,i--,++i
因为上边的i还是9 在先用++i的缘故 ++i=10 这部输出没有后续运算i++,i--不运算
上边三个都为 10,10,10

haiouda 发表于 2015-1-22 00:27:02

kklloo 发表于 2015-1-21 17:09
先弄懂i++ 跟++i 的区别八   i++ 是先使用i的值然后在加一   ++i是先加1再使用i的值自减跟自加是一个道 ...

y=(i--)+(++i)+(i++);

其中,(i--)=8 ; 之后,i值为7
      ,(++i)=8;之后,i值为8
         ,(i++)=8;
上面y 应该等于 24呀!???

shaoguanfa 发表于 2015-1-22 09:18:47

love105827 发表于 2015-1-21 21:56
#include
    #include
    void main()


小甲鱼说的很清楚了啊,编译器的问题,我们在实际使用的时候一般只会使用一个i++或者++i   所以不必纠结与这个问题了   上面的输出结果是我的编译器的问题到了你那不一样了很正常的啊编译器不同的原因{:5_91:}

优雅的独行者 发表于 2015-1-22 12:52:07

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int i = 8;
//   int y = (i--) + (++i) + (i++);
    printf("%d,%d,%d,%d\n", (i--) + (++i) + (i++), i++, i--, ++i);
}
同样的代码经测试
vc编译器输出是30,9,9,9
Qt下用gcc编译器 输出是27,8,9,10
关于前置++ 和后置++ 不用的编译器的实现是不一样的

ljx8455 发表于 2015-1-22 21:31:10

谢谢,大家的帮助。{:1_1:}

freeparty 发表于 2015-1-24 16:18:16

我也学习一下

ANDES 发表于 2015-1-27 20:11:15

y=(i--)+(++i)+(i++)首先要明白,运算是自右向左运算的,即先(i++)+(++i)最后在加(i--);所以y=9+9+9。
还是不懂就看下面:
i=i++;// i=8;
i=++i;// i=9;
sum=i+i;//所以最后会等于9+9
最后再
i=i--; //i=9
sum=sum+i;
页: [1]
查看完整版本: c语言