C语言自增自减运算

先从最简单的说起

a++和++a的区别

a++是先把数据放在temp空间,然后a的存储空间数再自加。而++a则相反。。。。

举例:

int a = 4;

a += (a++);

首先先执行括号里面的a++,a++是把数据先放在temp空间,然后a的存储空间数++。就是说等号的右边实际上是一个temp空间

而不是a这个变量,所以等号的右边此时还是4。但是等号的右边a已变成5了。答案为9

 int a = 4;

a += (++a);

首先执行++a,此时a自加变成5,再执行+=,加起来就是10。


        (a++)+= a;

 这道题是错的,为什么呢?因为首先执行(a++)里面的内容,所以等号的左边也就是一个tmp,而不是a。temp = temp + a;

tmp不是变量,它可以被赋值吗。

a = 4;

(++a) += (a++);

这个是对的,为什么呢?因为++a放到了a中了。也就是5了。再执行a+=(a++);就是11了。


但是很多情况下编译器的不同,会搞死我们的。。。。。。。。

a = 3;

b = (a++)+(a++)+(a++)

在vc中,我自己没测试过的。。。看了别人的文章的,答案是9,显然的就是先执行+号,然后再自加。

可是我用linux编译的却不然,答案是12.显然是先自加再进行+号运算。

c = (++a)+(++a)+(++a)

又是有两种情况,一种呢,在linux和vc下是等于16.它是先执行第一个++。再执行第二个++。然后执行+号。此时第一个a和第二个a都已经变成5了,5+5等于10,然后存放在tmp空间里,后面的++a,就是等于6,10+6等于16. 有的编译器是直接全部自加完才进行+号,所以就是18.


现在把printf和自加自减结合起来

a = 3;

printf("%d%d%d\n", --a, a++, a--);

输出是:2 , 2, 3

因为printf表达式是从右到左执行的,所以先是执行a--,表达式还是等于3,a已变成2,再执行a++,此时表达式a++还是等于2,但是a自身变成3,最后执行--a,就是2

a = 3;

printf("%d%d%d%d\n", ++a,--a, a++, a--);

输出是:3 ,3, 2, 3

前三个不用说了,到了执行第四个++a前,此时a是2,执行完++变为3,自然的第第二个a变量也为3,那为什么第三个和第四个a没变呢,因为它是表达式啊(tmp空间),

而不是变量a。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值