用一个函数给你讲吧
i++
int fun_plus_plus(int i)
{
int a=i;
i=i+1;
return a;
}
++i
int plus_plus_fun(int i)
{
i=i+1;
return i;
}
你可以很简单的看出,第一个函数返回的是一个临时变量,记录的是i+1之前的值,并且返回结果,
第二个函数直接返回的就是在i+1以后的i,两个函数执行完了都会改变i的值,但是第一种方式返回去的不是i本身,而是一个变量
在你写的循环中,i++,跟 ++i是一样的,因为前边没有 = 去传递值给别的变量
在你这个例子中几乎没有区别。在i= 0,a= i++中,a = 0,i=1,i先赋值给a,再自增;i = 0,a=++i中,i=1,a=1,i先自增,再赋值给a
i++ 和 ++i两个表达式的功能都能使得变量i的值增加1,
在for循环中,你在图中标注的地方,两处的功能一样,所以循环的结果是一样的
i++;//先用后自增
++i; //先自增后用自增后的值
i++ + i;//无定义的行为,因为 加号两边的表达式不能确定其求值的先后,在不同的编译器上会有不同的行为,如果你是老板,看到你的员工经常这么写,炒掉他(她)。
for(表达式1;表达式2; 表达式3)
{
语句块X;
}
表达式1 在 for结构开始的时候执行具只执行一次,for 外部的控件语句对其的影响这里不讨论。 表达式2 在每轮循环开始时求值,若其值为 0 则终止for 循环,非0就执行语句块X; 在每次语句块执行完或者是 continue提前完成当次循环后, 表达式3执行。如果是用break 终止循环,则表达式3就不再执行了。
至于 i++ 和 ++i,在循环内与在循环外,并无不同的意义。
另外, i++ 的先用后自增,其原有值仅在当条语句内或一个逗号隔开的子语句内可用。