关于华为一道面试题 ( ++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.点击打开链接
- 关于华为一道面试题 ( ++a )和( a++ )
- 关于华为一道面试题 ( ++a )和( a++ ) .
- 关于华为一道面试题 ( ++a )和( a++ )
- 一道腾讯的面试题,关于a和&a
- 华为一道面试题
- 一道华为面试题
- 华为一道面试题
- 一道华为面试题
- 一道华为面试题
- 一道华为面试题
- 一道华为面试题,关于程序优化的
- 一道华为的面试题
- 华为的一道面试题
- 关于一道面试题
- 关于一道面试题
- 一道超偏的c++面试题: (int&)a
- 一道超偏的c++面试题: (int&)a和(int)a的区别,考点:类型转换
- 两个关于a,b的面试题
- OCP-047 NATURAL JOIN and USING
- 修改default_workspace.xml后,如何显示修改后的内容。
- InstallShield内部库函数全集(中文版)
- 元素之间的位置关系
- windows ubuntu 双系统 蓝屏Technical information: ***stop:0x0000007B(0x80786B58,0xC0000034,0x00000000,0x00
- 关于华为一道面试题 ( ++a )和( a++ )
- Tomcat60 换 Tomcat7.0 项目启动异常IllegalArgumentException: taglib definition not consistent with specific
- hibernate复合主键方式(2)
- hdu(4007)正方形能框住最大的点数
- mysql乱码解决方法 无法插入 控制台乱码
- 由中序和后续序列建立二叉树
- <<探讨linux/unix>>之df
- paypal账户防风险实用3招小技巧
- SSH通信协议浅析