您的位置:首页 > 职场人生

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

2012-08-01 21:44 423 查看
关于华为一道面试题 ( ++a )和( a++ )

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

[cpp]
view plaincopyprint?

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

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

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

1. a++之类问题

2.点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: