您的位置:首页 > 编程语言 > C语言/C++

C语言自增自减运算

2017-03-29 14:45 253 查看
先从最简单的说起

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: