这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 有意思的问题,转贴

共1条 1/1 1 跳转至

有意思的问题,转贴

菜鸟
2006-11-21 22:13:14     打赏
关于一道微软的C语言笔试题的问题

下面是道微软的C语言笔试题及其分析过程,但仍有不明白的地方,望高手指点。题目:
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;
}


问程序会在哪一行死掉。
答案:程序执行最后一句s.p[0] = 2死掉。

分析:下面是逐条分析

struct S s;
(1) int * p = &s.i;/*取成员s.i的地址*/

(2) p[0] = 4;;/*设置成员s.i为4。因为指针p指向i地址,p[0]指向i*/
(3) p[1] = 3;/*设置成员s.p为3。因为p[0]指向s.i,p[1]指向指针s.p*/

(4) s.p = p;/*重新设置指针s.p为s.i的地址*/

(5) s.p[1] = 1;/*置s.p指针为1。因前面s.p指向s.i的地址,固s.p[1]指向s.p*/
(6) s.p[0] = 2;/*因为s.p指针已经通过前面被设置为1,即非法地址,所以s.p[0]想通过s.p去访问s.i显然是非法的。*/


请问(6)中所谓的“非法地址”是什么意思,为什么先设置s.p指针就不行?如果将s.p[1] = 1;与s.p[0] = 2;的位置倒过来,程序还会死吗?




关键词: 有意思     问题     转贴    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]