一道微软亚洲工程院C语言笔试题的解答
来源:互联网 发布:旧沙发改造知乎 编辑:程序博客网 时间:2024/04/30 02:23
题目:
struct S
{
int i;
int * p;
};
void main()
{
struct S s;
int * p = &s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
}
问程序会在哪一行死掉。
分析:这道题有点难度。如果你对指针掌握的不错的话,仔细分析,相信最终还是可以迎刃而解的。下面就来逐条分析
struct S s;
int * p = &s.i;/*取成员s.i的地址*/
p[0] = 4;;/*设置成员s.i为4。因为指针p指向i地址,p[0]指向i*/
p[1] = 3;/*设置成员s.p为3。因为p[0]指向s.i,p[1]指向指针s.p*/
s.p = p;/*重新设置指针s.p为s.i的地址*/
s.p[1] = 1;/*置s.p指针为1。因前面s.p指向s.i的地址,固s.p[1]指向s.p*/
s.p[0] = 2;/*因为s.p指针已经通过前面被设置为1,即非法地址,所以s.p[0]想通 过s.p去访问s.i显然是非法的。*/
在内存中的对应关系:
| s.i | s.p |
| p[0] | p[1] |
| s.p[0] | s.p[1] |
后话:这里出题者故意将s.p[0]和s.p[1]的访问次序对调,就是想通过设置s.p[1]搞死s.p[0]的相关操作。如果先执行s.p[0] = 2,然后执行s.p[1] = 1,那么所有代码都正常通过。
答案:程序执行最后一句s.p[0] = 2死掉。
- 一道微软亚洲工程院C语言笔试题的解答
- 一道微软亚洲工程院C语言笔试题的解答
- C语言测试题目解答:微软一道笔试题,2005年华为招聘
- 微软的一道C语言笔试题(转)
- 微软亚洲工程院全国第一轮笔试
- 曾经的一道C语言笔试题
- 一道C语言的指针笔试题
- 刚才收到微软亚洲工程院笔试电话, -- 然后面试。
- 2004-10-16 参加微软亚洲工程院笔试
- 回顾前天微软亚洲工程院全国第一轮笔试。最新更新!
- 解答微软的一道逻辑推理题
- 一道C语言笔试题
- 一道关于变量副作用C语言题的解答.
- 一道C语言面试题的解答
- 一道c题的解答
- 亚洲研究院微软笔试题
- 一道微软笔试题
- 一道微软笔试题
- 唯小人与女子难养也、相濡以沫及其他
- pager-taglib分页实现
- 优化C代码常用的几招
- Embedded firmware interview questions
- 路径,文件,目录,I/O常见操作汇总(一)
- 一道微软亚洲工程院C语言笔试题的解答
- 别踩static的地雷
- 嵌入式软件测试的十大秘诀
- netstat -an
- 宏的几个绝妙用法
- STL学习小结
- java.util.concurrent.CyclicBarrier
- 领域驱动设计和开发实战
- Flex3调用JNDI(备忘)