例一:
#include <>
void main()
{int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
}
程序1结果:
9
8
8
9
-8
-9
***********************************************************
例二:
#include <>
void main()
{
int i=3;
int j=4;
i++;
++j;
printf("%d, %d\n", i, j);
}
结果就是 4,5.
*************************************************************
#include <>
void main()
{
int i=3;
int j=4;
int a = i++;
int b = ++j;
printf("%d, %d\n", a, b);
}
结果是3,5。结合此例理解:“++前置:i自增1后再参与其它运算;++后置:i参与运算后,i的值再自增1”。
例三:
#include <>
void main()
{
int i=3;
int j=4;
int a = i++ + i++;
int b = ++j + ++j;
printf("%d, %d\n", a, b);
}
结果是:6,12
等价于:int a = (i++) + (i++);
int b = (++j) + (++j);
这下明白了,原来 i++的理解应该是执行完整个表达式的其他操作后,然后才自增,所以例子中的a=3+3=6;而后i再自增2次,i=5;相反,++j是先自增然后再参加其它运算,所以b=6+6=12。
***********************************************************************
例四:
#include <>
void main()
{
int i=3;
int j=4;
int a = i++ + i++ + i++;
int b = ++j + ++j + ++j;
printf("%d, %d\n", a, b);
}
有人可能会说,这很简单,我全明白了:a=3+3+3=9,i=6,b=5+5+5=15,j=5。真的是这样吗?
结果却是:9,19
这下可好,又糊涂了。对于a = i++ + i++ + i++;我们已经没有疑问了,++后置就是执行完整个表达式的其他操作后,然后才自增,上例中也得到了验证,但 b = ++j + ++j + ++j;又该如何理解呢?
原理表达式中除了预算法本身的优先级外,还有一个结合性
自增自减相关 来自淘豆网m.daumloan.com转载请标明出处.