新手求教一个关于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有了比较深刻的了解再来研究也不迟。
------解决思路----------------------
楼主还不明白吗,
i = i++ + ++i;
这样的语句,不同的编译器有不同的解释。
比如下面这句话:
“我爱上你了!”
不同的人的理解就完全不同嘛!
#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有了比较深刻的了解再来研究也不迟。
------解决思路----------------------
楼主还不明白吗,
i = i++ + ++i;
这样的语句,不同的编译器有不同的解释。
比如下面这句话:
“我爱上你了!”
不同的人的理解就完全不同嘛!