rayj 发表于 2015-3-8 17:27:10

关于小甲鱼的教程中,自增自减用printf输出时,到底是按照啥的求值顺序啊??

看视频教程的时候,举了如下例子,叫我们注意用Printf函数输出时,注意输出列表中的求值顺序问题,但没有说明到底是什么顺序:
#include <stdio.h>
void main ()
{
    int i=8;
    printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
}
输出结果是
8
7
8
8
-8
-8

看到第一行输出数字是8,应该就知道不是从左开始执行的。
于是我假设是从右开始执行,对程序做了如下修改

#include <stdio.h>
void main ()
{
    int i=8;
    printf("%d\n",-i--);
    printf("%d\n",-i++);
    printf("%d\n",i--);
    printf("%d\n",i++);
    printf("%d\n",--i);
    printf("%d\n",++i);
}

输出结果:
-8
-7
8
7
7
8

还是不对啊,到底求值顺序是什么?求高手指点!我用的是VC6

小小书童abc 发表于 2015-3-8 17:42:40

楼主我和你大体相同,我使用的是++i和i++但结果显示的不一样特别是和你的++i和i++
#include <stdio.h>
void main()
{
        int a = 8;
        int b = a++;
        int c = ++a;
        int d = a--;
        int e = --a;
        printf("the b is %d\nthe c is %d\nthe d is%d\nthe e is %d\n",b ,c,d,e);

}

结果显示的8 10 10 8

rayj 发表于 2015-3-8 19:57:31

小小书童abc 发表于 2015-3-8 17:42
楼主我和你大体相同,我使用的是++i和i++但结果显示的不一样特别是和你的++i和i++




是啊,显示的结果跟预想中不一样,不知道是不是跟编译器有关系吧。

仰望天上的光 发表于 2015-3-8 20:58:33

任何顺序都有可能,不同的C编译器有不同的做法。

rayj 发表于 2015-3-8 22:54:29

仰望天上的光 发表于 2015-3-8 20:58
任何顺序都有可能,不同的C编译器有不同的做法。

既然这样的话,我就可以不纠结这个问题了吧。
遇到这种算法的时候,我不用这种输出形式,就可以避免错误了

仰望天上的光 发表于 2015-3-9 16:03:36

rayj 发表于 2015-3-8 22:54
既然这样的话,我就可以不纠结这个问题了吧。
遇到这种算法的时候,我不用这种输出形式,就可以避免错误 ...

可以不纠结,我个人认为这个题目只是个反例,时时刻刻提醒你自己写程序千万不要写出类似的东西出来。
页: [1]
查看完整版本: 关于小甲鱼的教程中,自增自减用printf输出时,到底是按照啥的求值顺序啊??