/*
- 这个例子主要是考虑到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;
- }
/*
这个例子主要是考虑到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
但是对于临时空间为什么不可以作为左操作数呢?也就是说为什么不可以赋值呢?查查看~~~
我们必须要知道的临时变量空间对于编译器来说是”未定式“,是不可被赋值的,为了更进一步学习,给两个链接:
2.点击打开链接