c语言中一个关于c=(++i)+(++i)+(++i)结果的问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 13:05:37
c语言中的这个题他的运算过程到底是怎样的c=(++i)+(++i)+(++i)如果i是3的话为什么c的结果是16而不是15哦!
我用的是Microsoft Visual C++ 6的软件进行编译的!!!!!

你的结果为16,说明你用的编译环境是VC++6.0,如果你用TC环境,则结果为18。原因是这样的:

VC环境下,对于前增减运算(++i),自增自减是按从左到右扫描顺序,以一个运算符两边涉及前自增减的两个运算对象为单位进行之前增减的;对于后增减运算(i++),是以整个表达式为单位最后统一增减的,如(i++)+(++i)+(++i)是先对第一个加法运算符两端的运算对象处理,先自增一次再求解表达式前两项,然后再对i自增一次再求前一步骤的值与最后一项的和,若初始值i=1,则最终结果为:2+2+3=7;

所以,对于楼主的例子,(++i)+(++i)+(++i),首先扫描求解前半部分,即(++i)+(++i)的值(先对i进行两次自增运算,i的值变为5,再计算i+i的值为5+5=10),然后再求解后半部分,即10+(++i)的值(先对变量i自增1次,i的值变为6,再计算10+6=16),所以最终把16赋给变量c!!!

TC环境下,自增自减是在求解整个表达式的值之前(++i)或之后(i++)完成所有增减操作的。对于楼主的例子,则先对i进行3次自增运算,i的值变为6,再求解i+i+i=6+6+6=18!!!

不好意思,我也认为是15,但我调试了一下,结果确实是16,见鬼了。我又换了其他数试了试,都是比应该的结果多1,应该是编译器问题。我用java试了一下,结果就是15.

这个要看你用的是什么编译器
不同的编译器对这句话的执行方向是不一样的.
举例从右到左执行:
c=(++i)+(++i)+(++i)
先 ++i=4,此时且i=4
(++i)+(++i)=(++i)+4=(++4)+4=5+4=9.此时且i=5
c=(++i)+(++i)+(++i)=(++i)+5+4=6+5+4

同意第一个啊, i 是变量啊 ,()运算优先, 所以第一个i是3第二i是4个第三个i就是5。所以(3+1)+(4+1)+(5+1)在赋值C就是15啊, 不好意思,我是初学者啊!!

int i=3,c;
c=(++i)+(++i)+(++i);
----4----5------6------对应在表达式中的