首先看下面一段代码:
-
#include<stdio.h>
-
int main(void)
-
{
-
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--);
-
return 0;
-
}
程序运行的结果为:
-
9
-
8
-
8
-
9
-
-8
-
-9
-
请按任意键继续. . .
对结果的解释:
i 的初值为8,第4行i加1后输出故为9;第5行减1后输出故为8;第6行输出i为8之后再加1(为9);第7行输出i为9之后再减1(为8) ;第8行输出-8之后再加1(为9),第9行输出-9之后再减1(为8)。
从中可以总结两点:
① 对变量自增自减后是会改变变量原来的值的。比如上述代码第5行,++i之后i的值就变成了9.
② 负号不影响变量值的改变。
通过下面一个例子再次体会一下自增自减运算跟其他运算之间优先级的关系。
-
#include<stdio.h>
-
int main(void){
-
int i=5,j=5,p,q;
-
p=(i++)+(i++)+(i++);
-
q=(++j)+(++j)+(++j);
-
printf(\"p=%d,q=%d,i=%d,j=%d\",p,q,i,j);
-
return 0;
-
}
这个程序中,对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15。然后i再自增1三次相当于加3故i的最后值为8。而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为j先自增1,再参与运算,由于j自增1三次后值为8,三个8相加的和为24,j 的最后值仍为8。
小结:
① i++是在整行运算完了之后,i才增加1;
② ++i是在整行运算开始之前就先增加1,然后进行整行的运算。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28673014/viewspace-1477621/
,如需转载,请注明出处,否则将追究法律责任。