(1)
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;//(1)
s.p[0] = 2; // (2)
}
程序在(2)处引起崩溃。原因在于(1)句引起的,相当于*((int *) 1) = 2;
注意 s.p[0] 是s.p结合再[0],相当于p[0];
p[0] = *p = i = 4;
p[1] = *(p+1) =* (&s.i + 1) = s.p = 3;
s.p[1] = p[1] = s.p = 1;
s.p[0] = *(int *s.p) = *((int *) 1 ) = 2;肯定出问题,直接写内存地址,操作系统肯定不让你这么干。
相当于 int *q = 0x01;
q[0] = 2;会崩溃的。
//int *q; q[0] = 2;这样没问题,操作系统会自动为你分配一个没有使用的内存地址,然后把2放进去。
此题关键对于指针的理解。