解析“一道考遍东北三省和青岛没有一人做出来的简单题目 ”
2008-04-17 09:59
363 查看
CSDN上有人出了这么个题目,原帖如下:
我们公司要在学校招一批应届毕业生,我被任命出软件笔试题和面试主考官,由于我们公司是一家以硬件为主的公司,即便是招软件人员,也最好是软硬结合的,在此前提下,我出了下面一道简单的C语言题目,主要考查考生对C语言指针和内存布局的了解。
下面的C代码在VC++6.0下的运行结果是什么?请详细说明原因。
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int )a+1);
printf("%x,%x",ptr1[-1],*ptr2);
return 0;
}
结果出乎我们的意料,全部答对的没有一个人,有3-5个人ptr1[-1]回答对了。到底我的题目出得太难还是现在的学生确实太差了?我认为这是一道很容易的题,我把它放在试卷的第一题,作为送分的,结果却让我大跌眼镜。当然还有一个原因,我们公司虽然在学电子、单片机的学生中大受追捧,但是计算机专业的学生却对它了解不够,所以很多计算机专业的高手没有过来参加笔试。
---------------------------------------------这道题比较有意思,拿来解析下,我的是在PC+Dev C++下面操作:
先看a[5]={1,2,3,4,5}; 在内存中分布
big endian(motorola处理器)
00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05
little endian (intel处理器)
01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00
(&a+1)中的&a取得是整个数组的首地址,&是对整个数组操作的,所以(&a+1)即ptr1指向了a[4]后面的内存区,ptr1[-1]指针后退一步,指向a[4]输出为5
(int )a+1);把地址强制转化为一整型变量,地址加1,此时指针指向00 00 00 02
所以最后的输出是5,2000000
我们公司要在学校招一批应届毕业生,我被任命出软件笔试题和面试主考官,由于我们公司是一家以硬件为主的公司,即便是招软件人员,也最好是软硬结合的,在此前提下,我出了下面一道简单的C语言题目,主要考查考生对C语言指针和内存布局的了解。
下面的C代码在VC++6.0下的运行结果是什么?请详细说明原因。
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int )a+1);
printf("%x,%x",ptr1[-1],*ptr2);
return 0;
}
结果出乎我们的意料,全部答对的没有一个人,有3-5个人ptr1[-1]回答对了。到底我的题目出得太难还是现在的学生确实太差了?我认为这是一道很容易的题,我把它放在试卷的第一题,作为送分的,结果却让我大跌眼镜。当然还有一个原因,我们公司虽然在学电子、单片机的学生中大受追捧,但是计算机专业的学生却对它了解不够,所以很多计算机专业的高手没有过来参加笔试。
---------------------------------------------这道题比较有意思,拿来解析下,我的是在PC+Dev C++下面操作:
先看a[5]={1,2,3,4,5}; 在内存中分布
big endian(motorola处理器)
00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05
little endian (intel处理器)
01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00
(&a+1)中的&a取得是整个数组的首地址,&是对整个数组操作的,所以(&a+1)即ptr1指向了a[4]后面的内存区,ptr1[-1]指针后退一步,指向a[4]输出为5
(int )a+1);把地址强制转化为一整型变量,地址加1,此时指针指向00 00 00 02
所以最后的输出是5,2000000
相关文章推荐
- 一道关于多态题目的解析
- 一道笔试题目-解析
- 一道简单而又容易出错的题目
- 有一道十分简单的数学题,但是我就是没想出来,不得以发在首页求助
- 一道简单的题目
- 一道简单C语言题目的优化
- poj1655-又是一道简单而又纠结的题目
- 一道简单的面试题,据说90%人不能在30分钟内做出来
- 神的回复,让一道jvm的题目瞬间简单,在中国,评论永远是最精彩的
- 记一道巨简单,但是我没有答上来的Sql面试题
- 一道简单的寻找中位数的题目
- 青年歌手大奖赛_评委会打分 (一道比较简单的题目)
- 一道赋值题目的错误解析
- 一道简单测试题目引发的感想!
- 华为面试的一道题目 真的是佩服自己好菜,时间到了才做出来
- 入坑pwn第一题,在我们学校最厉害的学长帮助下解决了这一道最简单的题目
- 一道CCNA的简单题目
- 一道简单的把ArrayList中的正负数组分开并求得边界索引的题目
- 一道简单的ACM题目讨论
- 一道简单而又容易出错的题目