对于刚开始学C语言的同学来说,a++和++a比较容易搞混。我们今天来区分一下,并且说说两者在运行效率上面的区别。
首先是a++:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 1;
int b = a++;
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
运行结果:
b的值等于a的初始值1,也就是说,a是先将值赋给了b,再对自己进行自加运算,我们称a++为后置++,先使用后自加。b=a++的效果相当于{b=a,a=a+1}。
再来看++a:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 1;
int b = ++a;
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
运行结果:
b的值等于2,也就是说此时b接收的值是a+1的值,我们称这样的a叫前置++,先使用再自加,b=++a的效果相当于{a=a+1,b=a}。
接着我们来谈谈效率问题:
在for循环中,我们经常会用循环变量的自加运算去控制变量,那么我们可以选a++,也可以选++a,那么两者该选哪个合适呢?今天我们从效率的角度来分析一下它们,我们将a++和++a当作函数来处理,来看一下效果。
首先是++a的:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//++a
int a = 1;
int A1()
{
a += 1;
return a;
}
int main()
{
int b = A1(a);
printf("a=%d\n", a);
printf("b=%d\n", b);
}
运行结果:
我们用A1()函数来实现++a的功能,返回++a的值,最后得到上面的运行结果。
再来看看a++的:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//a++
int a = 1;
int A2()
{
int temp = a;
a += 1;
return temp;
}
int main()
{
int b = A2(a);
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
运行结果:
A2()函数实现了a++的功能,我们对比两个函数发现,A2()函数比A1()函数多了下面这句话:
int temp = a;
这是干啥的呢?其实就是在a++的过程中创建一个临时变量,去接收初始时a的值,然后再让a自加,最后函数返回这个临时变量的值。所以,相对于a++来说,++a不用创建临时变量,节约了时间和空间,当然,我们举得这个例子数值较小,所以运行起来差异不大,但是对于数多的时候,就相对比较明显了,所以我们推荐在循环里面用++a来控制循环变量,如下所示:
for (int i = 0; i < n; ++i)
总结一下:a++先使用后自加;++a先自加后使用;循环里面尽量采用++a,以节约时间和空间,提高程序效率。