imde 发表于 2014-5-20 22:17:37

两个一样意思的程序输出结果不一样

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

#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--);
        }
这两个的结果为什么会不一样呢?请高手指点,谢谢!


15岁的小朋友 发表于 2014-5-21 18:44:20

和算法优先级有关!

765643729 发表于 2014-5-28 00:58:40

请不要写这种语句!理由很简单,它既不好理解又不好维护,最重要的是它的结果会因编译器的不同而不同。

zhazha 发表于 2014-5-29 12:55:26

#include<stdio.h>
// 注:不同的编译器可能给的值不一 不过运算的规则是不变的 我用的是vc++
void fun()
{
         int i=8;
   printf("%d\t%d\t%d\t%d\t%d\t%d\t",++i,--i,i++,i--,-i++,-i--); //这个涉及到-- ++ 的优先不同,-- 比++的优先高,
   printf("\n\n\n\n");             //故 先算--i 输出7再算++i 故输出8
      
}

#include<stdio.h>
void main()
{
fun();
         int i=8;
         printf("%d\t",++i); // i先自增1为9
         printf("%d\t",--i); // i先自减1为8
         printf("%d\t",i++); // i不变输出8;(但是下一步的i已增为9)(i ++是先用i的值再自增)
         printf("%d\t",i--); // i不变输出9 (下一步i减为8)
         printf("%d\t",-i++);//输出-8 (下一步i==-7)
         printf("%d\t",-i--);//输出-9
   printf("\n\n\n\n");
}

imde 发表于 2014-6-3 20:55:38

我初学,什么都不懂,谢谢各位指点{:1_1:}

lark 发表于 2014-6-5 00:04:27

这种。。纠结的问题。

ravenhu13 发表于 2014-6-5 11:30:34

当然不一样,一个是直接就取值了,一个是一边取值一边改值,效果就不一样了。。。

牡丹花下死做鬼 发表于 2014-6-5 12:59:27

这就是为什么我曾一再强调一定要把自增自减作为一个独立的代码来写
和编译器的优化有关

牡丹花下死做鬼 发表于 2014-6-5 13:00:14

ravenhu13 发表于 2014-6-5 11:30 static/image/common/back.gif
当然不一样,一个是直接就取值了,一个是一边取值一边改值,效果就不一样了。。。

主要是编译器优化问题 或者像二楼的那种说法 算法优化 指的是同个一个问题

ravenhu13 发表于 2014-6-5 14:21:25

牡丹花下死做鬼 发表于 2014-6-5 13:00 static/image/common/back.gif
主要是编译器优化问题 或者像二楼的那种说法 算法优化 指的是同个一个问题

用debug就不优化了。。。呵呵
页: [1]
查看完整版本: 两个一样意思的程序输出结果不一样