关于C语言的++运算符

来源:百度知道 编辑:UC知道 时间:2024/09/23 04:50:20
最近碰到几次关于C语言++运算符的问题,但却很奇怪,求高手帮解答,代码如下:
int i = 3;
int k = (++i)+(++i);
printf("K=%d\n",k);
i = 3;
printf("Result is :%d",(++i)+(++i));
在Turboc2下编译运行结果为:
k=10
Result is :9
但在linux下编译运行结果为:
k=10
Result is :10
但我在Java下运行:
int i = 3;
int k = (++i)+(++i);
System.out.println("K="+k);
i = 3;
System.out.println("Result is :"+((++i)+(++i)));
结果是:
k=9
Result is :9

我的理解(我也问过其它人),应该Java的结果是正确的,可为什么在C里面会有这么些奇怪的结果(在C的教程里给的int i = 3;int k = (++i)+(++i);
System.out.println("K="+k)的答案就是10),是不是跟编译器有关?那倒底这样的运算的标准是什么样的呢,权威的结果应该是什么样的呢。

我编译运行结果是
k=10
Result is :10
即先让i自增,再让i自增,最后计算i+i,就是5+5
不过++运算ANSI标准里面没有规定,具体运算顺序是要取决于编译器的
熟悉自己惯用的编译器可以让电脑输出自己想要的结果,但还是尽量写这样的东西,要写绝大多数人和编译器都能看懂并得出同一结论的代码

各种编译器对++和--的优先级和结合性都有区别,所以最好不要滥用++和--,个人觉得一般情况下还是使用a=a+1这样比较好,虽然a++的效率更高一些,不过为了读代码时更方便,这些细微的效率问题完全可以忽略不计

你说对了,就是和编译器相关,由于C标准没有规定,所以不同的编译器实现不同。所以不要在一行语句中使用++操作符两次及以上!实际上不要使用优先级来指定计算顺序!虽然你看得懂,别人不一定看得懂,而且很容易出错。

C标准没有这样 的规定,具体结果取决于编译器。为了提高可移植性,不要写这种恶心的代码。代码多写几行换来的是可移植性的提高、可读性的提高。纠缠这样的问题没有任何意义。

另外,不要把 ++ 放在Java和C之间来比较,这根本没有可比性。