区分a++和++a,浅谈两者的效率问题

对于刚开始学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,以节约时间和空间,提高程序效率。 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值