自增和自减的作用是使变量的值加 1或者减 1,
例如:++ i,—— i (在使用i之前,使 i 的值加(减)1)
i ++,i ——(在使用i之后,使 i 的值加(减)1)
粗略的看,++ i 和 i ++的作用相当于 i = i + 1.但是++ i 和 i ++ 的不同之处在于++ i 是先执行 i = i +1 之后,在使用 i 的值;而 i ++ 是先使用 i 的值后再执行 i = i +1。
如果 i 的原值等于 3 ,是分析下面的赋值语句;
j = ++ i ; ( i 的值先变成 4 ,在赋值给 j,j 的值为 4)
j = i++; (先将 i 的值 3赋值给 j ,j 的值为 3 ,然后 i 的值变为 4 )
注意![/color自增和自减运算只能用于变量,而不能用于表达式或者常量,如 6++ 或者(a+b)++ 都是不合法的。因为 5是常量,常量的值不能不能改变。(a+b)++ 也是不能实现的,假如 a + b 的值为 5,那么自增后得到的 6 放在什么地方呢?无变量可供存放。
使用 + +和——运算符时,常会出现一些人们常常想不到的副作用,用MJ老师的话来说,后果很严重!如 i +++ j ,是理解 (i++)+ j呢,还是 i +(++ j)呢为了避免多义性,应当采用不致引起歧义的写法,可以加一些括号,如( i++)+ j。
再例如:
#include <stdio.h>
int main()
{
int a, b, c;
a = 5; //此时 a的值是5
b = a++; //这一步,a一开始为5, 先返回a的值给b,b就为5了,然后 a执行++,a就为6了。
printf("a = %d, b = %d \n", a, b); //输出 a = 6, b = 5
c = ++a; //这一步, a先执行++,a的值就为7了,然后再将a的值返回给c,c也等于7了。
printf ("a = %d, c = %d \n", a, c); //输出 a = 7, c = 7
return 0;
} |
|