本文共 673 字,大约阅读时间需要 2 分钟。
题目: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显然是非法的。*/转载地址:http://mfedi.baihongyu.com/