一段看不懂的程序。
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;
}
代码是用pad手打的。可能对齐不是很好看。
我就是想请问这里面的每一句的意义。真的看不懂。还有就是这个代码会在哪崩溃,求详细分析。
}
[解决办法]
struct S
{
int i;
int * p;
};
void main()
{
S s;//定义S结构的一个对象
int * p=&s.i;//这里是把s中i的地址给指针p
p[0]=4;//这里给指针所指向的地址赋值,也就是给i赋值
p[1]=3; //这个结果是未定义的,给一段莫名的空间赋值,这里可能出错
s.p = p;//这里把s中的p指向上面p指针的地址,这里也就是i的地址
s.p[1]=1; //这个结果是未定义的,给一段莫名的空间赋值,这里可能出错
s.p[0]=2;//改变i的值
}
struct S
{
int i;
int * p;
};
void main()
{
S s;
int * p=&s.i;
p[0]=4;//s.i = 4
p[1]=3;//s.p = 0x3
s.p=p;//s.p = &s.i
s.p[1]=1;//s.p = 0x1
s.p[0]=2;//将地址0x1赋值为2,这里会崩溃
}
S s; //创建一个结构体对象
int * p=&s.i;//定义一个指针p,指向s成员中i的地址
p[0]=4;//相当于s.i = 4;
p[1]=3;//相当于s.p = 0x00000003
s.p=p;//此时s.p指向i的地址
s.p[1]=1;//相当于s.p = 0x00000001;
s.p[0]=2;//对0x00000001内存进行写操作出错