注册 登录
编程论坛 JAVA论坛

多个i++和++i的区别,不同的编译器有不同的结果,无意间发现的……

秦时的明月夜 发布于 2015-06-02 11:05, 1901 次点击
程序代码:
#include<stdio.h>
int main(){
    int i=5;
    int m,n,k;
    int p,q;
    q=(m=(i++))+(n=(i++))+(k=(i++));
    printf("m:%d n:%d k:%d i:%d q:%d",m,n,k,i,q);
    printf("\n");
    i=5;
    p=(m=++i)+(n=++i)+(k=++i);
    printf("m:%d n:%d k:%d i:%d p:%d\n",m,n,k,i,p);
    i=5;
    p=(++i)+(++i)+(++i);
    printf("m:%d n:%d k:%d i:%d p:%d",m,n,k,i,p);
    printf("\n");
   
    return;
}
//m:5 n:5 k:5 i:8 q:15
//m:6 n:7 k:8 i:8 p:21
//m:6 n:7 k:8 i:8 p:22

程序代码:


public class Main {
    public static void main(String[] args) {
        int i=5;
        int m,n,k;
        int q=(i++) + (i++) + (i++);
        i=5;
        q=(m=i++) + (n=i++) + (k=i++);
        System.out.println("m:"+m+" n:"+n+" k:"+k);
        System.out.println("q:"+q);
        System.out.println("===============");
        i=5;
        int p=(m=++i) + (n=++i) + (k=++i);
        System.out.println("m:"+m+" n:"+n+" k:"+k);
        System.out.println("p:"+p);
        System.out.println("===============");
        i=5;
        p=(++i) + (++i) + (++i);
        System.out.println("p:"+p);
    }

}
//m:5 n:6 k:7
//q:18
//===============
//m:6 n:7 k:8
//p:21
//===============
//p:21

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。

[ 本帖最后由 秦时的明月夜 于 2015-6-2 15:24 编辑 ]
5 回复
#2
林月儿2015-06-02 11:28
#3
秦时的明月夜2015-06-02 15:30
我知道,同一种语言下的编译器不一样结果也不一样,java 和c 还不一样的……他们处理的顺序是不一样的,就是和编译器有关系,比如  i=5,int m=i++ + i++在c里面 是先把i 的值赋值给变量m=5+5=10;i=7,java 不一样是 m=5+6=11 ;i=7;
#4
wp2319572015-06-02 15:43
还是其他语言的 i=i+1 比较老实一些  c语言发明者 创建i++的同时  居然还创建了++i  各种编译器对此的解释还不一致   真晕
#5
日知己所无2015-06-05 17:59
对于Java来讲,所有的JVM的实现应该都是一样的,这是由语言本身确保的。换言之,可以迷信Java……
#6
cracker_meng2016-10-10 12:32
c语言是是用什么编译器  VC?
1