首先看一下题目,下列程序会在那一行崩溃,程序如下:
#include<iostream>
using namespace std;
struct S{
int i;
int *p;
};
int main(){
S s;
int *p = &s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] =2;
return 0;
}
虽然程序很短,但想要理解清楚,还是不容易的,首先先来说几个知识点:
1.对于struct结构体来说,它所分配的空间是连续的;
2.p[0]代表p所存储地址的值,关于p[0]这类问题的使用方法,下面会提到的;
现在开始对程序进行解读:
首先,*p=&s.i,代表p存储s.i的地址,下面给p[0] = 4,则代表给p所指向的地址赋值为4,也就是s.i = 4;然后是p[1],p[1]代表p所指向地址的下一个地址,在结构体里面地址是连续的,因此p[1]也就指向的是p所指向地址的下一个地址,也就是s.i的下一个地址,也就是s.p,给p[1]赋值也就是给s.p赋值,s.p为指针类型,因此用十六进制表示,所以s.p为0x3;下面是s.p指向p指针(这里两个