新手求教一个关于c语言的小疑点

新手求教一个关于c语言的小问题,
#include <stdio.h>

int i= 1 ;
int main(int argc ,char *argv[])
{
         i++;
printf("%d\n",i);
i = 1;
i = i++ + ++i;
printf("%d\n",i);
return 0;
}

这个小程序之前在redhat系统上运行打印出来是2和5,现在在ubuntu上运行打印出来却是2和4 ,现在想知道  这个i++ + ++i 到底是该怎么算,非常感谢。

另外备注下   之前将i定义为全局变量和定义在主函数里面打印出来结果也是不一样的,据说是printf打印的地址不一样,想知道是怎么回事,谢谢。
------解决思路----------------------
http://bbs.csdn.net/topics/370153775看这个贴
------解决思路----------------------
未定义行为,各种编译器编译出来的结果不同,导致运行结果不一样,实际使用中,不应该写出这种代码。
------解决思路----------------------
VS08输出2,5
i = i++ + ++i;
1、++i,i = 2;
2、i++,i = 3;
3、i++ + ++i,i = (2 + 1)+ 2
------解决思路----------------------
对于这种未定义的行为, 不同的编译器结果不一样, 楼主只需记住前++是先改变本身在计算, 后++先计算在自增。  
实际开发中是不会写出这种代码的,  只有考二级会有这种。。。。新手求教一个关于c语言的小疑点
------解决思路----------------------
引用:
我现在纠结的是,这个计算的步骤到底有没有一个正规的步骤,现在就两个版本,1+3 和 2+2+1 这两种算法都算对吗?根据不同编译器的规则来看的花

没有正规的步骤,标准压根就没规定正规步骤。所以,这种代码压根就不该出现在程序里。

这个问题,等你对C有了比较深刻的了解再来研究也不迟。
------解决思路----------------------
楼主还不明白吗,
i = i++ + ++i;
这样的语句,不同的编译器有不同的解释。

比如下面这句话:
“我爱上你了!”

不同的人的理解就完全不同嘛!
新手求教一个关于c语言的小疑点