title: C 语言自增自减运算辨析 layout: post categories: C语言 tags: C语言 自增运算 自减运算
c语言中,自增(++)和自减(--)运算是很有c语言“感觉”的一种运算符,但是在实际编写中,尤其对初学者或者很久没接触它的,会对它的原理和运算结果产生混淆,接下来做详细辨析。
语法为:a++
,其结果与:a = a + 1
一样,也和:a += 1
一样,作用很明显,方便阅读,减小代码量。例如下面的例子,就能看出明显的效果了:
((3+a)*sqrt(3)/(a%2))=((3+a)*sqrt(3)/(a%2))+1;
/*简化后*/
((3+a)*sqrt(3)/(a%2))++;
自增也可以表示为 ++a
, 它们都能把a 的值加 1,但是两个表达式的值却不同,用一个例子说明:
#include<stdio.h>
int main()
{
int a = 1, b = 1, a2, b2;
a2 = a++;
b2 = ++b;
printf("a = %d, b = %d, a2 = %d, b2 = %d", a, b, a2, b2);
}
输出结果为:
a = 2, b = 2, a2 = 1, b2 = 2
其实,a++
的值为 a
本身,++a
的值为 a+1
后的值。
也可以按教科书那种记:
b = a++
是先赋值后运算,即先b=a
,然后a++
。b = ++a
是先运算后赋值,即先++a
,然后++a
。
自减运算原理和辨析与上面自增运算相似,a--
等于 a = a -1
,表达式 a--
的值为 a
,表达式 --a
的值为 a-1
。