a++与++a在单独使用时与a=a+1等价,数值上二者也是一致的。
但是从实现上来说,a++会先创建一个a的副本,然后对a的值进行递增1,然后返回这个副本的值以实现对a原值的访问,其有一个拷贝的过程,时间和空间都需要。即为先读取a的值,再进行+1。
而++a没有创建副本的过程,直接递增1,然后使用a的值。即为直接进行+1操作,再读取a的值。因此,在循环中等一些情景,常用++a运算符在一定程度上可以提高效率。
例如:
int a = 5;
int b;
b = ++a;
printf("%d %d\n", a, b);
输出为a=6;b=6;
将++a改为a++,此时输出为a=6;b=5;
原理同样也可以推广到 --a与a-- 运算中
(1) 如果用前缀运算符对一个变量增1(减1),则在将该变量增1(减1)后,用新值在表达式中进行其他的运算。
(2) 如果用后缀运算符对一个变量增1(减1),则用该变量的原值在表达式中进行其他的运算后,再将该变量增1(减1)后。
例如:
int a = 2, b, c;
b = a--;
c = --a;
printf("b=%d, c=%d", b, c);
输出为b=2;c=0;