关于华为一道面试题 ( ++a )和( a++ )

来源:互联网 发布:淘宝海运价格表 编辑:程序博客网 时间:2024/06/05 06:06

昨天偶尔在网上看到一道华为面试题,觉得有点无语,这么NB的公司也出这种没有意义的题目,唉~~~话不多说,贴上代码:

 上面还有我自己的解释:

/*这个例子主要是考虑到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


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

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

1. a++之类问题

2.点击打开链接



原创粉丝点击