C语言中关于i++的问题,懂的进

来源:百度知道 编辑:UC知道 时间:2024/06/06 04:45:10
我看谭浩强老师的C程序设计第三版,第58页中关于i++的内容,书上有一道题说
i的初值为3,求(i++)+(i++)+(i++)的值
他说有的系统求出来是12,这个我能理解,但是为什么有的系统(如TURBO C和MS C)求出来是6?
他原话是这样说的
而另一些系统(如TURBO C和MS C)把3作为表达式中所有i的值,因此3个i相加,得到表达式的值为9.在求出整个表达式的值后再实现自加3次,i的值变为6.
WHY?
什么意思?不懂
那为什么表达式的值是9呢?TUOBO C是怎么算出9的呢

一个是表达式的值,一个是I的值 看清楚了啊

这个问题本来就是这个样子的,不同的编译器有着不同的编译方法
而且可能还与不同的机器有关,所以在不同的机器/不同的编译器上所得到的结果是多种多样的,这就被称为多义性,不推荐这种写法

这种写法显然是不符合编程思想的,如果是考题也就罢了,如果自己写程序,绝对不能写出这样的语句,在这类的面试中,遇到这样的写法,就可以直接忽略过去了

有的是3+4+5=12,然而有的是3+3+3=9,而后者是TURBO C的答案了,就是说之前的i每一次相加并不自加,而是当表达式结束后,一次性自加3。
为什么会有这样的区别呢?
这主要是编译器不同了,如果不对编译器优化结构因事前者,但对编译器优化后就是后者了,显然前者的运算次数比后者多。

不同的编译器有不同的优化方式,这里涉及到语句的优化。不要详细的研究只要稍微了解就好了

不知道 ~ 我算出来也是12~ 难道还能出别的数~... 丢人了~... 3~

只要知道这两个操作符的作用,并能用好它们就可以了,关于这个问题,完全不必要深究,这样的代码是没有用的,实际编程中如果用了这样的代码,就说明你的算法有问题(或者效率不高),而且这种代码不具备可移植性,因此它是没有用的.