|
发表于 2011-7-21 14:51:37
|
显示全部楼层
[b]++i,--i 的意思是在使用i之前,先使i的值加(减)1;而i++,i--的意思是在使用i之后,再使i的值加(减)1。故:
printf("%d\n",++i); /* 结果为9*/ 语句中i原先的值为8,使用前先自增为9,此时表达式++i的值也为9,故输出为9。
printf("%d\n",--i); /*结果为8*/ 语句中i原先的值为9,使用前先自减为8,此时表达式---i的值也为8,故输出为8。
printf("%d\n",i++); /* 结果为什么为8?不明白 */ 语句中i原先的值为8,由于i++是先使用后运算,故此时表达式i++的值也为8,故输出为8,但运算后,i进行了自增,变成9。
printf("%d\n",i--); /*结果为什么为9?不明白*/ 语句中i原先的值为9,由于i--是先使用后运算,故此时表达式i--的值也为9,故输出为9,但运算后,i进行了自减,变成8。
printf("%d\n",-i++); 由于负号运算符和自增(减)运算符的优先级相同,且均为右结合性,故-i++相当于-(i++),此时,先取出i的值使用,输出-i的值-8,也就是表达式-i++的值-8,然后使i的值自增为9(注意这里i的值一定不是-9)
printf("%d\n",-i--); 原理同上一条语句,表达式-i--输出为-9,而i的值自减为8
你可以用下列语句进行检验体会,也可参看谭浩强老师的C程序设计第二版第24页关于自增(减)运算符的解释。
#include <stdio.h>
main()
{
int i=8;
printf("++i=%d\n",++i); /* 结果为9*/
printf("i=%d\n",i); /*i为9*/
printf("--i=%d\n",--i); /*结果为8*/
printf("i=%d\n",i); /*i为8*/
printf("i++=%d\n",i++); /* 结果为8 */
printf("i=%d\n",i); /*i为9*/
printf("i--=%d\n",i--); /*结果为9*/
printf("i=%d\n",i); /*i为8*/
printf("-i++=%d\n",-i++); /*结果为-8*/
printf("i=%d\n",i); /*i为9*/
printf("-i--=%d\n",-i--); /*结果为-9*/
printf("i=%d\n",i); /*i为8*/
}
|
|