题目:
struct S {
int i;
int * p;
};
void main()
{
S s;
int * p = &s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
}
问程序会在哪一行死掉。
来源:http://topic.csdn.net/u/20071102/14/19449798-1147-4c57-816e-78fa0e77b538.html
-------------------
解答:
把数组写成指针形式
结构体中的地址是连续的(p=&s.i,p+1=&s.p)
struct S {
int i;
int * p;
};
void main()
{
S s;
int * p = &s.i; // p指向结构s中的整型i(p=&s.i)
p[0] = 4; // *(p+0)=*p=s.i=4
p[1] = 3; // *(p+1)=*(&s.i+1)=*(&s.p)=s.p=3
s.p = p; // s.p= &s.i (s.p指向结构s中的整型i的地址)
s.p[1] = 1; // *(s.p+1)=*(&s.i+1)=*(&s.p)=s.p=1 (s.p[1]为对&s.i的下一个地址的内容进行操作(赋值),即s.p=1)
s.p[0] = 2; // *(s.p+0)=*s.p(=*0x00000001)赋值, error
}