懂C语言的朋友请帮帮我。

来源:百度知道 编辑:UC知道 时间:2024/09/22 05:20:12
帮我讲讲下面这道题:i=2; j=(i++)+(++i)+(++i)最后i=? j=?
重在过程!! 谢谢!

i=5;j=12;
j=(i++)+(++i)+(++i) 中i的值先是2,i++的意思是先把i的值参与运算再加1,在算式中不改变i的值,++i是先把i的值加1再参与运算,两个++i就使i的值变成了4,j的值就等于4+4+4=12;运算完成后再把i+1(i++),i的值就变成了5;

i++的意思为先提取i的值再运算
++i的意思为先把i的值加1再运算
对于您给的这个式子早有争论,因为在标准的ANSI C中,并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排[详细说明请参考C语言设计(第三版 )谭浩强]

所以您使用不同的编译系统会有两种答案
在vc中运行结果为10,在其他中运行为8
建议以后不要这样写,这样的程序的可移植性是非常低的

推荐写法
#include<stdio.h>
main()
{int i=2,j,a,b,c;
j=(i++);
a=(++i);
b=(++i);
c=j+a+b;
printf("%d,%d,%d,%d",j,a,b,c);
}

这样的运行结果才是11

j=(i++)+(++i)+(++i)
按照从左到右的顺序计算:
计算第一个括号(i++)后,i=3,括号内容值为2;
计算第二个括号(++i)后,i=4,括号内容值为4;
计算第三个括号(++i)后,i=5,括号内容值为5;
最后i=5,j=2+4+5=11。
说明:i++与++i均表示把i自己的值增加1,区别是i++表示先取i的值再自增1,++i表示先把i的值自增1,然后再取值。

首先给你说下i++是先取i的值再i=i+1;
++i是先i=i+1再取i的值
所以,j=2+4+5=11
i=5
j=(i++)+(++i)+(++i)
____2____4_____5

你只要知道i++是先把i的值作为表达式的值之后,在把i加1重新赋给i;
而++i是把i+