( ++a )和( a++ )相关顺序问题

/*
	这个例子主要是考虑到a++和++a的存储问题;
	我们知道,对于a++是先将a给表达式再++;
	那么这就是需要一个tmp空间来保存++之前
	的a!!!但是对于++a是不需要的,因为先
	执行++,那么就是直接改a空间内容就好了!
	那么我们下面的问题就是这样!
*/
 
#include <stdio.h>
 
int main()
{
 
	int a = 4;
 
	/*
		解释:下面的答案在Linux和VC下测试是9;
		如果这样的形式不好看,那么写成这样就
		可以了:a = a + ( a++ );
		那么由于a++是先把数放到tmp空间再++;
		所以,执行顺序:把后面a放进tmp空间,然后
		a的存储空间数++,那么现在a中是5,tmp中是4
		最后a = a + tmp;所以最终结果==9
	*/
	a += ( a++ );				
	printf("a = %d\n\n", a);
	
 
 
	/*
		解释:这里和上面的区别就是++先后执行的
		问题,执行顺序:先a++,那么此时的a中就是
		5了,然后将这个结果也放进一个tmp空间,
		最后在相加,那么结果就是:5 + 5 == 10
	*/
	a = 4;
	a += ( ++a );
	printf("a = %d\n\n", a);
	
 
	/*
		注意:下面的代码编译是通过不了的哦!为什么?
		其实自最开始已经解释了!就是有没有tmp的问题!
		注意a++是先把a给表达式,再++,那么对于左边
		来说,其实给的存储空间是tmp而并不是a本身,对于
		tmp来说是不可以被赋值的,只能是作为输入操作!!
		所以。。。
	*/
 
	/*
	a = 4;
	(a++) += a;
	printf("a = %d\n\n", a);
	*/
 
 
	/*
		这个本质其实也是差不多的;
		就是先有了++a放到a中了,那么相当于是a的初
		始值是5,然后在执行:a += ( a++ );那么结果
		就是11呗,呵呵~
	*/
	a = 4;
	( ++a ) += ( a++ );
	printf("a = %d\n\n", a);
		
	return 0;
}
run:

g++ -o test test.cpp

./test

但是对于临时空间为什么不可以作为左操作数呢?也就是说为什么不可以赋值呢?查查看~~~

我们必须要知道的临时变量空间对于编译器来说是”未定式“,是不可被赋值的,为了更进一步学习,请点击:

a++之类问题

原文链接:https://blog.csdn.net/shanshanpt/article/details/7410746

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值