关于a++的一些理解

本文只是一些本人的简单理解,未经证实,如有错误希望大佬斧正

先从一个简单的代码入手
#include <stdio.h>

int main()
{
	int a = 1;
	printf("%d,%d,%d",++a,a,a++);
	return 0;
}

虽然代码很简单,但是真的不好算呢!

下面公布答案

在这里插入图片描述

看起来可能有点奇怪,于是又做了如下测试。

#include <stdio.h>

int main()
{
	int a = 1;
	printf("%d,%d,%d",a=2,a=3,a=4);
	return 0;
}
//运行结果:2,2,2

从上面的程序可以发现,在printf();函数里面,首先进行的是a的计算,计算顺序为从右向左,然后从左向右打印出a的值。

然后我们再来分析一下第一个程序
  • 首先把程序给改一下
#include <stdio.h>

int main()
{
	int a = 1;
	printf("%d,%d,%d",++a,++a,++a);
	return 0;
}
//运行结果:4,4,4

即可以这样理解为:从右向左每个a都自增1,最后,a自增到了4,然后打印每个a的值。

  • 再来看看a++,++a的区别
    ++a是使用a之前先使a加一,a++是使用i之后再加一。
    也就是++a是先计算,再操作;a++是先操作,再计算。

那么我们换个思路来理解这句话: a++可以想成a先创一个等于它自己本身的副本a’=a,并且返回,然后自己在自增。
虽然这个想法没有依据,但是却可以很好的解决第一个程序的问题:

#include <stdio.h>

int main()
{
	int a = 1;
	printf("%d,%d,%d",++a,a,a++);
	//从右边开始,第三个a:先创一个副本a'=a=1并返回,然后a=a+1=2,
	//第二个a无操作
	//第一个a自增1,此时a=3
	//然后逐个打印a,a,a'也就是3,3,1
	return 0;
}

总结

  • printf()函数是从右向左计算,从左向右打印的(可能与逗号操作符有关,曾经看过相关文章找不到了)
  • a++可以想成a先创一个等于它自己本身的副本a’=a,并且返回,然后自己在自增(如有错误请斧正)

猜你喜欢

转载自blog.csdn.net/Thebaldslasher/article/details/104289067
今日推荐