for 语句里面 i++与++i区别

我也是在做题的时候才发现的:为什么在for语句里面就变成一样了?
eg:for(i=1;i<5;i++)与for(i=1;i<5;++i)。
for(i=1;i<5;++i)----这个没有疑问,在做表达式3的时候i值是自加完后把值送给表达式2进行比较。
for(i=1;i<5;i++)----这个为什么也是i加完值后才和表达式2比较,i++不是先把值送出去,然后在自己加一么?

我见有大虾是这样解释的,不过对于新手的我来说,还是有些困难。谁能讲得再通俗一点,谢谢!!
(只是i++或++i没有出现在包含其它内容的表达式中,二者的效果就相同。for语句不是一个表达式,最后部分++i或i++是一个完整的表达式,所以效果是相同的。)

在for( ; ; i++) 或者 for( ; ; ++i)的时候 是没有区别的

区别在于
i++ 和 ++i 的执行顺序是不一样的
比如

i = 1;
a = i++;
b = ++i;

那么a = 1 b = 2
因为 a是先让i把值给a 才让i自增的
而,b是让i先自增 才把i的值给B的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-06
可以这么理解:
如果i++和++i其单独作为一个语句时,效果是一样的,只有作为表达式一部分时才有i++和++i的区别。for(1;2;3)后面是三个表达式语句,因为用的是“;”,如果你用单步调试也可以发现i++或++i是作为一个语句执行的。所以for是先执行i++;或++i;语句,执行完这条语句之后再执行下一条的比较语句。本回答被提问者采纳
第2个回答  2011-06-06
应该这么说吧,是表达式与语句的区别,
i=8 是表达式
i=8; 是程序语句
对于一个表达式内,i++这个表达式的值等于i,然后i自加1
而for语句里分四块,前三块通常说为 表达式一、表达式二、表达式三,第四块说循环体,循环体可以是单一语句(可不加大括号),循环体是复合语句(语句块)时,必需加大括号
自增、自减是对一个表达式来说的,因此,表达式一、表达式二、表达式三的自增、自减互不影响

希望回答对你有帮助。
第3个回答  2021-08-03
我感觉这样子更便于理解吧:

int i = 0;
int j = i++;
int x = 0;
int y = ++x;
System.out.println(i);//这时i为1
System.out.println(j);//这时j为0
System.out.println(x);//这时x为1
System.out.println(y);//这时y为1
//由上面程序可以看出,i和x初始值都为0(其实意义都是为了验证i++和++i的区别)
//然后不管时i++还是++x最后输出的值都为1
//但是j和y因为++在前和后的关系,最后的值不通
//所以可以得出
//++在后的j,先把i(0)赋值给j,i再自增变成1
//++在前的y,i先自增变成1,最后再赋值给y
//总结:而在for中或者任何表达式中,自增量i或x不管如何,在下一条程序指令执行前,值都已经发生变化,只是在当前程序指令的发生先后顺序不一致,巧妙记忆:++在前先自增,++在后后自增
第4个回答  2022-04-04
我觉得这样好理解:每次循环先判断 i 是否满足i<=10,如果满足就执行printf("%d ", i),再执行自增语句。【重点】是无论执行i++和++i,变量i的值一定会加一,注意这里是变量i的值,不是表达式i++和++i的值。表达式的值i++为i,++i为i+1。所以在for里没有区别。
相似回答